移动View的方法:
view.layout(mOriLeft, mOriTop, mOriRight, mOriBottom); |
view的内容移动流程
scrollTo()/scrllBy()—>invalidate()/postInvalidate()——>computeScroll();
Scroller只是用来计算合适的滑动坐标
|
Scroller使用:
scroller = new Scroller(Context)- 调用
Scroller.startScroll()或者Scroller.fliing(); - 调用
invalidate()确保回调computeScroll()方法 - 复写
computeScroll(),并在其中调用view.scrollTo/view.scrollBy - 调用
invalidate()确保刷新界面
VelocityTracker使用
mVelocityTracker = VelocityTracker.obtain();使用obtain()方法获取实例- 调用
addMovement(Motion Event)函数将Motion event加入到VelocityTracker类中 - 调用
computeCurrentVelocity(int)来初始化速率单位 - 调用
getXVelocity()或getYVelocity()来获取速率
overScrollBy使用
- 调用
overScrollBy,计算需要滑动的x,y坐标和是否clamped(滑到顶端了) overScrollBy会回调onOverScrolled方法- 复写
onOverScrolled方法执行真正的继续滑动,或者回弹
总结:
Scroller使用,必须配合computeScroll来执行真正的滑动overScrollBy使用,必须配合onOverScrolled来执行真正的滑动
computeScroll()和onOverScrolled()默认都是空函数,等着用户来复写
函数参数详解:
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) |
资料:http://www.eoeandroid.com/thread-553375-1-9.html?_dsign=404ec396
将文章中的Demo运行一下就非常清楚了