关于Android View滑动的一些总结

 

                                      关于Android View滑动的一些总结

  一直都对Android的Scroll滑动一知半解的,看了下大神的博客和Android官方文档,下面是我对于AndroidView滑动的几个方法进行总结:

 

(一) scrollTo(x,y)与scrollBy(x,y)都能进行View的滑动,他们的区别是什么?

 

scrollTo(x,y):该方法是让View相对于最初始位置滚动某段距离。

     例如:我要移动view到坐标点(100,100),那么我的偏移量就是(0,,0)  - (100,100) = (-100 ,-100)  ,我就要执行view.scrollTo(-100,-100),达到这个效果。

                    

scrollBy(x,y) :该方法是让View相对于当前的位置滚动某段距离。

    从源码中看出,它实际上是调用了scrollTo(mScrollX + x, mScrollY + y);
mScrollX + x和mScrollY + y,即表示在原先偏移的基础上在发生偏移,通俗的说就是相对我们当前位置偏移。根据父类VIEW里面移动,如果移动到了超出的地方,就不会显示。

 

扫描二维码关注公众号,回复: 321704 查看本文章

区别:相同之处是他们都是相对于父容器的内部滑动,不同之处是如果2个方法只调用一次,那么都会滑动相同的位置,但是多次调用这2个方法区别就出来了。

       scrollTo()是相对于最初始位置滑动某段距离,当第二次调用时,view的位置是不会变化的,也就是说只会滑动一次。

     scrollBy()是相对于当前位置滑动某段距离,那么多次调用后,当前位置是不断会更新的,所以scrollBy()方法会让VIew持续滑动起来。

 

 (二) Scroller中startScroll()方法

 

 public void startScroll (int startX, int startY, int dx, int dy,int d)

  以提供的起始点和将要滑动的距离开始滚动。滚动会使用缺省值250ms作为持续时间。

     参数

       startX: 水平方向滚动的偏移值,以像素为单位。正值表明滚动将向左滚动

  startY: 垂直方向滚动的偏移值,以像素为单位。正值表明滚动将向上滚动

  dx: 水平方向滑动的距离,大于0会使滚动向左滚动

  dy: 垂直方向滑动的距离,大于0会使滚动向上滚动

        d: 滑动持续的时间

 

下面介绍一下与坐标相关,容易混淆的几个方法表示的含义:
1  mScrollX:表示离视图起始位置的x水平方向的偏移量

mScrollY:表示离视图起始位置的y垂直方向的偏移量

注意:mScrollX和mScrollY指的并不是坐标,而是偏移量。

2  getWidth()方法是相对于屏幕来说控件的宽度,控件宽度大于屏幕宽度时,该值为屏幕宽度

3  getLeft() ,getRight(),getBottom(),getTop()方法的值是针对其父视图的相对位置,而不是控件相对于坐标的位置

 

(三) Scroller开发带有滚动的ViewGroup的流程如下

 如果你使用 Scroller ,流程如下:

  1.可以在自定义的布局中,按照需求初始化 Scroller 构造函数。

  2.重写onInterceptTouchEvent(MotionEvent ev)方法,看看是否要拦截相关的事件。

  3.重写onTouchEvent(MotionEvent event)方法,根据触摸屏上的动作使用 computeScroll()以及 scrollTo 和 scrollBy  方法 进行根据手指对布局进行滑动效果。

  4.在触摸操作结束(MotionEvent.ACTION_UP)的时候,调用startScroll(int startX, int startY, int dx, int dy, int duration)方法,进行动画自动操作,来完成整个滚动流程。

 

 在此我推荐下面2篇关于利用Scroller开发带有滚动效果的ViewGroup的博客。认真搞懂其中一个,你的理解就更深了。

 http://blog.csdn.net/vipzjyno1/article/details/24664161

http://blog.csdn.net/guolin_blog/article/details/48719871

猜你喜欢

转载自1029457926.iteye.com/blog/2282515