上图是OverScroller
的注释,注释的意思是:大多数情况下,OverScroller
是Scroller
的替代品。
有关Scroller
,我也整理了一篇文章:
高级UI<第四十四篇>:Android Scroller详解
我们知道想把一个View的内容偏移至指定坐标(x,y)处,利用scrollTo()方法直接调用就OK了。但我们不能忽视的是,该方法本身来的的副作用:很迅速的将View或ViewGroup偏移至目标点,而没有对这个偏移过程添加滚动效果,对用户而言可能是不太友好的。于是,基于这样的偏移控制,Scroller类被设计出来了,该类的主要作用是为偏移过程添加滚动效果,从而使偏移更流畅,更完美,更友好。
OverScroller
的功能要比Scroller
完善,Over是超出的意思,即OverScroller提供了对超出滑动边界的情况的处理(回弹),这两个类的API基本是一致的,OverScroller比Scroller添加了以下几个方法:
- isOverScrolled()
返回当前的位置是否有效 或者是否超出滚动边界。
- springBack(int startX, int startY, int minX, int maxX, int minY, int maxY)
springBack英文意思就是回弹吧,没错,这个方法就是实现回弹效果,或者说让视图恢复原来位置。
- notifyHorizontalEdgeReached(int startX, int finalX, int overX)
通知水平滚动是否到达边界,通常这个信息来处理 知道什么时候已经开始滚动,比如在调用fling这个方法,然而很多情况下,这不能提前知道 ,这个方法将 开始X到结束X 转化成合适的值 作为当前的动作和动画。
- notifyVerticalEdgeReached(int startY, int finalY, int overY)
通知垂直滚动是否到达边界,通常 这个信息来处理 知道什么时候已经开始滚动,比如在调用fling这个方法,然而很多情况下,这不能提前知道 ,这个方法将 开始X到结束X 转化成合适的值 作为当前的动作和动画。
- fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY, int overX, int overY)
fling
方法Scroller
类也有,但OverScroller
多出两个参数:overX、overY
[overX]
x轴超出回弹距离
[overY]
y轴超出回弹距离
首先,我们两分析一下public void fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY)
方法
[startX]
:x轴起始位置
[startY]
:y轴起始位置
[velocityX]
:x轴滑动速度
[velocityY]
:y轴滑动速度
[minX]
:x轴最小边界
[maxX]
:x轴最大边界
[minY]
:y轴最小边界
[maxY]
:y轴最大边界
看到以上参数的解释,我想应该就很好理解了。
假设,最小边界为10,最大边界为50。
那么如果起始滑动速度为5,那么滑动距离不为5,而是10;
如果起始滑动速度为20,那么滑动距离为20;
如果起始滑动速度为60,那么滑动距离不为60,而是50;
OverScroller
新增的方法中多了两个参数:overX、overY。
假设超出回弹距离为20,那么
那么如果起始滑动速度为5,那么滑动距离不为5,而是10,无回弹效果;
如果起始滑动速度为20,那么滑动距离为20,无回弹效果;
如果起始滑动速度为60,那么滑动距离为60,并回弹到50位置;
如果起始滑动速度为80,那么滑动距离为70,并回弹到50位置;
最后,说一下,OverScroller
其它接口和Scroller
一样,直接查看高级UI<第四十四篇>:Android Scroller详解即可。
[本章完...]
网友评论