????????????????????????????????????? 关于Android View滑动的一些总结" />
当前位置: 代码迷 >> Android >> ????????????????????????????????????? 关于Android View滑动的一些总结
  详细解决方案

????????????????????????????????????? 关于Android View滑动的一些总结

热度:592   发布时间:2016-04-24 11:36:23.0
关于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里面移动,如果移动到了超出的地方,就不会显示。

?

区别:相同之处是他们都是相对于父容器的内部滑动,不同之处是如果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

  相关解决方案