View 的滑动

主要以下三种方式实现View的滑动

1、使用scrollTo 、scrollBy
通过view 自身提供的scrollTo 、scrollBy 来实现view 的滑动。

源码:

 /**
     * 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();
            }
        }
    }

    /**
     * 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);
    }

可以看出scrollBy 方法其实是调用了scrollTo方法.
重点理解view移动时的坐标变化。
view位置移动原理可以参考:
http://blog.csdn.net/bigconvience/article/details/26697645

2、使用动画
a、可以考虑使用view (视图)动画和属性动画。view 动画不改变控件的坐标位置,仅仅是一个缩影,也就是相当于把图片移动了而已。比如,一个Button移动后,你会发现点击移动后Button所在的地方却没有任何反应,而点击原来的地方却有反应。
处理方法:可以通过放置两个Button 并且将他们的点击事件都写成相同,当移动后就将原来的Button隐藏,而将后面的Button显示出来。这样并可以解决以上问题。
b、使用属性动画

视图动画与属性动画介绍可参考:
http://blog.csdn.net/u010156024/article/details/49281789

3、改变布局参数
通过改变布局参数,即改变LayoutParams.比如我们要将一个Button向右平移100px,只需要将LayoutParams里的marginLeft参数值增加100px即可。
另外一种方法:在view的左边放置一个空的view ,这个view 的默认宽度为0 ,当我们需要向右平移100px的时候,就将这个空view 的宽度设为100px,此时,Button自动被挤到右边。

三种方法的对比:
scrollBy 、scrollTo :操作简单,适合对View的滑动。
动画:操作简单,主要适用于没有交互的View 和实现复杂的动画效果
改变布局参数:操作稍微复杂,适用于没有交互的View

你可能感兴趣的:(2016寒假学习)