Android提供了滚动帮助类Scroller,手势帮助类GestureDetector和速度帮助类VelocityTracker,之所以叫帮助类,是因为它们和正常的UI显示没有直接的关系,它们只是提供一些算法帮助,帮助我们得到想要的坐标值或者事件监听。下面分别讲一下这三个帮助类。
Scroller:
Scoller是自动滚动的帮助类,用到的场合是让某个控件自动滚动。比如有这么一个需求,我想让一个按钮5秒之内从(100,120)这个坐标滚动到(200,300)这个坐标。我们可以自己写代码,比如计算出每隔100毫秒应该滚动多少,然后用一个计时器或者直接用一个递归在5秒内让这个按钮不断执行draw方法,可以实现但是显然比较麻烦。那Scroller就是帮助我们实现这个功能的类,它帮我们提供了一种算法计算出了每次draw的时候应该滚动到哪里而不需要我们自己去计算了。
Scroller的用法比较简单:
在初始化控件的时候就可以初始化Scroller,然后在需要自动滚动的时候调用startScroll方法,然后在View的computeScroll方法里(这个方法会在View每次draw的时候调用),调用Scroller的computeScrollOffset方法,这个方法就是实现了刚才说的计算并返回滚动是不是应该结束的boolean,并且把计算结果赋值到Scroller的currentX和currentY中。然后在View的computeScroll里直接调用scrollTo滚动到这点就行了。滚动完以后,调用invalidate,然后又会调用到draw方法,然后又会调用到computeScroll方法,接着又会调用Scroller的computeScrollOffset方法。
这里View的computeScroll方法和内部调用的invalidate方法形成了间接递归。
@Override
public void computeScroll() {
if (mScroller.computeScrollOffset()) {
scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
invalidate();
}
}
GestureDetector:
关于手势&#