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的计算,建议先从单个坐标(另外一个置零最好)分析。