Scroller类简介
来源:互联网 发布:喵叔的实验室 知乎 编辑:程序博客网 时间:2024/06/05 17:39
Scroller
在SlidingMenu
项目中为了实现控件的滑动,需要用到Scroller
类来实现缓慢的滑动过程,至于有人说View类可以直接调用scrollTo()
方法,这里scrollTo()
方法也能实现移动,但是它的移动是很快一下子就移过去了,就像穿越一样,直接从现实回到了过去,而Scroller
类能够实现过程的移动。可以理解为一步步的走。
- 查看Scroller源码
发现- public class Scroller {
- //...
- }
Scroller
类并不是View
的子类,只是一个普通的类,这个类中封装了滚动的操作,记录了滚动的位置以及时间等。
该类有两个重要的方法:computeScrollOffset()
: 文档的说明为Call this when you want to know the new location.
查看源码可以发现,如果在移动到指定位置后就会返回false.正在移动的过程中返回true。startScroll()
: 该方法的内部实现,并没有具体的移动方法,而是设置了一些移动所需的数据,包括移动持续的时间、开始位置、结束位置等。从而我们可以知道调用Scroller.startScroll()
方法并没有真正的移动,而是设置了一些数据。
Scroller.startScoll()
是如何与View
的移动相关联呢?在View
的源码中:- /**
- * Called by a parent to request that a child update its values for mScrollX
- * and mScrollY if necessary. This will typically be done if the child is
- * animating a scroll using a {@link android.widget.Scroller Scroller}
- * object.
- */
- public void computeScroll() {
- }
通过注释我们可以看到该方法又父类调用根据滚动的值去更新View,在使用
Scroller
的时候通常都要实现该方法。来达到子View的滚动效果。
继续往下跟发现在draw()
方法中回去调用computeScroll()
,而draw()
方法会在父布局调用drawChild()
的时候使用。具体关联
通过上面两步大体能得到Scroller
与View
的移动要通过computeScroll()
来完成,但是在究竟如何进行代码实现。Scroller.startScroll()
方法被调用后会储存要滚动的 起始位置、结束位置、持续时间。所以我们可以在computeScroll()
方法中去判断一下当前是否已经滚动完成,如果没有滚动完成,我们就去不断的获取当前Scroller的位置
,根据这个位置,来把相应的View
移动到这里。- public void computeScroll() {
- if (mScroller.computeScrollOffset()) {
- //如果还没有滚动完成,我们就去让当前的View移动到指定位置去
- mCenterView.scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
- //移动完后,我们应该继续调用computeScoll方法去获取并且移动当前View。所以我们调用invalidate方法去请求重绘,这样父类就会调用computeScroll
- postInvalidate();
- }
- }
代码中使用源码下载:点击打开链接
- 邮箱 :charon.chui@gmail.com
- Good Luck!
0 0
- Scroller类简介
- Scroller简介
- Scroller简介
- Scroller简介
- Scroller简介
- Android Scroller简介
- Android Scroller简介
- Scroller类
- Android Scroller简介 ---- 界面滚动
- Android类说明---Scroller
- Android类说明---Scroller
- android之scroller类
- Android 滚动类Scroller
- Scroller类使用
- Scroller类功能介绍
- Scroller类实现滑动
- 【android】Scroller类介绍
- Android类说明---Scroller
- 【Hackerrank】Find the merge point of two joined linked lists
- monit
- 网络拓扑发现
- Bug管理系统UML2.0建模实例(一)
- html title 换行
- Scroller类简介
- Mysql常用命令
- python总结
- jQuery 效果 - 隐藏和显示
- moveTaskToback退后台
- mediainfo
- qt零碎知识点记录
- 在Ubuntu上安装Qt5.2.0
- meld--Visual diff and merge tool for the GNOME Desktop