美文网首页
View的滑动

View的滑动

作者: 拙峰朽木 | 来源:发表于2017-06-09 16:05 被阅读17次

    滑动实现的三种方式:

    1、通过VIew自身的scrollTo/scrollBy方法实现
    2、通过动画给View施加平移效果
    3、通过改变View的LayoutParams使得View重新布局

    ScrollTo/ScrollBy(只能针对View内容滑动)

    看下ScrollTo的源码:

       /**
         * Set the scrolled position of your view. This will cause a call to
         * {@link #onScrollChanged(int, int, int, int)} and the view will be
         * invalidated.
         * @param x the x position to scroll to
         * @param y the y position to scroll to
         */
        public void scrollTo(int x, int y) {
            if (mScrollX != x || mScrollY != y) {
                int oldX = mScrollX;
                int oldY = mScrollY;
                mScrollX = x;
                mScrollY = y;
                invalidateParentCaches();
                onScrollChanged(mScrollX, mScrollY, oldX, oldY);
                if (!awakenScrollBars()) {
                    postInvalidateOnAnimation();
                }
            }
        }
    

    其实他的注释已经告诉我们了,这个方法其实是通过一个onScrollChanged的回调来刷新当前View
    有意思的你会发现ScrollBy其实内部也是调用了ScrollTo:

     /**
         * Move the scrolled position of your view. This will cause a call to
         * {@link #onScrollChanged(int, int, int, int)} and the view will be
         * invalidated.
         * @param x the amount of pixels to scroll by horizontally
         * @param y the amount of pixels to scroll by vertically
         */
        public void scrollBy(int x, int y) {
            scrollTo(mScrollX + x, mScrollY + y);
        }
    
    

    他们区别则是对于传入的x,y的处理。scrollBy()其实是在原坐标的基础上移动的,即相对滑动。而scrollTo则是绝对滑动
    通过ScrollTo/ScrollBy来实现滑动只能实现View的内容的滑动,并不能滑动View本身.

    使用动画滑动

    这个就简单了,动画中有个位移动画。可以直接通过他来实现View的滑动,这个主要操作view的translationX和translationY。
    需要注意的是,通过位移动画移动的只是View的影响,并没有改变View 的真实位置。这样会导致一些问题,比如说本来这个View有点击事件,移动后的View点击没有效果,反而是点击View之前的位置会相应事件,这就很怪异了。
    当然Android3.0之后的属性动画没有这个问题。

    改变布局参数实现滑动

    这个目前看没有啥毛病,就是操作有些复杂。
    比如说你要将View向左移动200px,那么你就将View的marginRight +200即可

    相关文章

      网友评论

          本文标题:View的滑动

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