为什么感觉现在CSDN的博客编辑器也有点叛逆呢,总是不听话,看不到鼠标的位置,还有经常粘贴一些外面的文章进来的时候总是很难编辑。好了,不扯远了,不管难不难都要写吖。呵呵。
学习和使用Scroller是在很早之前了,那时候学习和使用她我只能说还处于模糊期,因为我当时是带着神奇的眼光去审视这个类的,所以当时总无法理解。只是知道个大概的意思然后知道怎么使用(糊涂的用),现在终于明白了(什么也无法说明,只能说明我很笨,T_T),所以很想跟大家来解释一下,一方面加深自己的理解,另一方面服务那些仍然无法理解她的大众。
大家可以先看其他前辈的关于Scroller的文章,不管是API还是使用示例。
1.android 中文 api (64) —— Scroller
4.Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解 (强烈推荐军哥的博客,大家多跟他学习学习)
就不多推荐了,其他的大家可以Google或Baidu一下,很多,多看几篇理论之后一定要亲自动手去写代码实践,更改写参数然后运行看下效果,那样最好了,能够立刻明白是参数都是怎么个意思。
现在来说下我自己的理解:
其实很简单,Scroller就是一个“计算器”,是什么计算器呢,她是帮我们计算从你给定的点(咱们编程说的点当然是坐标了哈)到你需要滚动到的目标点在给定时间内每次的偏移量,我举个最简单的例子,假如我们想从A(0, 0)点花100毫秒的时间移动到B(200,100)点,则Scroller会帮我们算好,之后的每1毫秒将在X方向上移动2个像素,Y方向上移动1个像素,当然正值或者负值代表的方向嘛,这里不说了,大家直接运行,看看效果即可知道。我们只需要调用mScroller.computeScrollOffset()即可判断Scroller滚动到目标位置了没,返回true说明还没有,这时候我们可以调用mScroller.getCurrX(), mScroller.getCurrY()获取我们最新的X,Y轴的位置,其他相关的API大家可以看android 中文 api (64) —— Scroller 一般我们用的最好就是上面我说的三个了,一般在容器类的computeScroll()方法中这么用。
@Override
public void computeScroll() {
if (mScroller.computeScrollOffset()) {
// mScrollX = mScroller.getCurrX();
// Log.i(TAG. "mScrollX is "+mScrollX);
// 记得这里千万不要为了做打印工作调用一次getCurrX得到mScrollX然后在下面的scrollTo再次调用getCurrX取值,每次取值Scroller都会计算一次,也就是时间向后推移一毫秒。
scrollTo(mScroller.getCurrX(), 0);
postInvalidate();
}
}
我再次强调一遍,其实Scroller就是充当一个距离计算器,没有什么神奇的,就是一堆的数学运算。