View的三种滑动方式

Posted xiongbo753

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了View的三种滑动方式相关的知识,希望对你有一定的参考价值。

 

这一节我想记录的是View的三种滑动方式,但这三种滑动方式基本上不是弹式滑动 

 

一.使用scrollTo/scrollBy

      先看一下 scrollTo和 scrollBy 的源码是如何实现的

/**
* 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 实现的
mScrollX:代表的是 View内容左边缘的距离到View左边缘在水平方向的距离
mScrollY: 代表的是View内容上边缘的距离到View上边缘在垂直方向的距离 (这两个值都是以View内容的上边缘和左边缘为基准的)
从这两个值的定义来看,scrollTo和scrollBy只能改变View内容的位置而不能改变View在布局中的位置。

也可以这么理解:
如果偏移位置发生了改变,就会给mScrollX和mScrollY赋新值,改变当前位置。
scrollTo(int x,int y)中的x,y 不是代表坐标而是代表了偏移量
例如: 我要移动view到坐标点(100,100),那么我的偏移量就是(0,,0)  - (100,100) = (-100 ,-100)  ,我就要执行view.scrollTo(-100,-100),达到这个效果。

 

二.使用动画

     因为android 3.0以下的都不用了 所以这里只介绍属性动画如何实现View 的移动.

             ObjectAnimator.ofFloat(targetView,"translationX",0,100).setDuration(100).start();  这行代码就能够让View滑动  (动画在下一节中会说到)

 

三.改变布局参数(即改变布局参数)

        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) updateCowBtn.getLayoutParams();

          params.leftMargin +=10;

     updateCowBtn.requestLayout();

          通过改变LayoutParams的方式去实现View的滑动同样是一种灵活的方式,需要根据不同的情况去处理

 

三种不同的滑动的方式

       scrollTo/scrollBy : 操作简单,适合对View内容的滑动

      动画:操作简单,主要使用于没有交互的View和实现复杂的动画

     改变布局参数:操作有点复杂,使用于有交互的View

 

以上是关于View的三种滑动方式的主要内容,如果未能解决你的问题,请参考以下文章

Android自定义View的三种实现方式

ios中怎样监听uislider滑动结束

Android中View滑动实现方式

Android中关于View滑动的实现你应该知道的

View的滑动

js的三种继承方式及其优缺点