本文共 762 字,大约阅读时间需要 2 分钟。
默认的seekbar,在触摸开始后,不会立即调整数值。只有在触摸停止,或者滑动一段距离后,才会有视觉上的进度变化,这样的进度条,反应太慢,不够灵敏。
怎么实现按下后立即拖动?可以在触摸开始后,手动调用背后的方法。
sysVolSeek.setOnTouchListener((v, event) -> { if (event.getActionMasked()==MotionEvent.ACTION_DOWN) { try { Method mm = AbsSeekBar.class.getDeclaredMethod("trackTouchEvent", MotionEvent.class); mm.setAccessible(true); mm.invoke(v, event); return true; } catch (Exception e) { e.printStackTrace(); } } return false; });
这是我翻出来的,自己在几年前写的代码,用到了反射,但答案真的是这样吗?于是我把反射的代码移除,发现也可以……
sysVolSeek.setOnTouchListener((v, event) -> event.getActionMasked()== MotionEvent.ACTION_DOWN);
只要在 ACTION_DOWN 的时候返回 true就可以了,这是为什么呢,之前并未给进度条设置触摸监听器,而是在父容器的 intercepttouch 中直接反射调用 trackTouchEvent。
录屏演示
这样的便利性往往被人所忽略,因为追求表面的华丽是容易的,追求真正的以人为本才是难题。
转载地址:http://jmbii.baihongyu.com/