美文网首页
android 的scroller的使用

android 的scroller的使用

作者: Tenny1225 | 来源:发表于2015-11-25 17:27 被阅读1875次

    理解

    我把scroller理解为滚动数据携带器,他只是一个记录滚动数据的工具,并不显示view的滚动效果,其实这点我觉得和安卓的属性动画挺像,他只提供数据,具体要怎么做,就看你的了。

    scroller的两个重要方法

    1.mScroller.startScroll(0, 0, 0, 0, 1000)

    前面的两个参数是起始坐标x,y,中间两个参数是对应的偏移量,最后一个参数是执行时间。

    2.mScroller.computeScrollOffset()

    判断是否完成滚动,这个函数会一直返回false,直到滚动完毕返回true。

    获取Scroller携带的位置数据

    mScroller.getCurrX() //获取mScroller当前水平滚动的位置
    mScroller.getCurrY() //获取mScroller当前竖直滚动的位置
    mScroller.getFinalX() //获取mScroller最终停止的水平位置
    mScroller.getFinalY() //获取mScroller最终停止的竖直位置
    mScroller.setFinalX(int newX) //设置mScroller最终停留的水平位置,没有动画效果,直接跳到目标位置
    mScroller.setFinalY(int newY) //设置mScroller最终停留的竖直位置,没有动画效果,直接跳到目标位置

    使用

    ViewGroup中有个computeScroll方法,ontouch或invalidate()或postInvalidate()都会导致这个方法的执行,
    所以我们可以手动执行ViewGroup方法,同时再computeScroll中执行postInvalidate(),这就会形成一个循环,我们在这个循环中调用ViewGroup的scrollTo方法更新位置信息,同时使用mScroller.computeScrollOffset()方法监听滚动是否完毕。

    public class MyView extends LinearLayout {
        private boolean s1 = true;
        Scroller mScroller = null;
    
        public MyView(Context context, AttributeSet attrs) {
            super(context, attrs);
            mScroller = new Scroller(context);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void computeScroll() {
            if (mScroller.computeScrollOffset()) {
                scrollTo(mScroller.getCurrX(), 0);
                postInvalidate();
            }
        }
       //需要手动执行这个方法
        public void beginScroll() {
            if (!s1) {
                mScroller.startScroll(0, 0, 0, 0, 1000);
                s1 = true;
            } else {
                mScroller.startScroll(0, 0, 500, 0, 1000);
                s1 = false;
            }
            invalidate();
        }
    
    

    相关文章

      网友评论

          本文标题:android 的scroller的使用

          本文链接:https://www.haomeiwen.com/subject/vhxdhttx.html