移动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运行一下就非常清楚了