VelocityTracker
使用注意事项
VelocityTracker
资源在使用完毕后需要释放,通常在 MotionEvent.ACTION_CANCEL
&& MotionEvent.ACTION_UP
后释放,释放调用如下方法:
1 | velocityTracker.clear(); |
但是需要注意的是,掉用后会发生异常(回收任务已在线程池中),所以需要在调用前加!= null
判断,在调用后将velocityTracker
置空,因为每次使用后都会置空回收,因此在每次启用时都要初始化,而不是只初始化一次(例如:放在onCreate
中进行初始化)。
还有如果要追踪MotionEvent.ACTION_MOVE
,则需要在每次MotionEvent.ACTION_DOWN
和 MotionEvent.ACTION_MOVE
时调用addMovement(event)
。
具体代码如下:
1 |
|
Scroller
注意事项
Scroller
所做的事情只是将View
中的内容移动位置移动,而非View
本身,如果需要移动View
则应该考虑在其所在的ViewGroup
中使用Scroller
。
1 | scroller = new Scroller(context); |
注意事项,在View.invalidate()
中又注释到:
1 | /** |
而onDraw(Canvas canvas)
只在draw(Canvas canvas)
里有调用,所以实际上draw(Canvas canvas)
,而draw(Canvas canvas)
会调用computeScroll()
方法,所以就会一直scrollTo(scroller.getCurrX(), scroller.getCurrY());
,直到条件返回为false
。
至于deltaX
与deltaY
的计算,建议先从单个坐标(另外一个置零最好)分析。