View滑动是自定义ViewGroup中十分常见的一个功能。Android提供了多种View滑动的方法。

  1. layout方法

  2. offsetLeftAndRight()与offsetTopAndBottom方法

  3. LayoutParams方法

  4. scrollTo 与scrollBy方法

  5. 利用Scroller类

  6. 属性动画

  7. ViewDragHelper

虽然Android提供了这个多方法,实际上他们的原理都是一样的,当触摸到View时,系统记下当前触摸点的坐标;当手指移动时,系统记下移动后的触摸点坐标,从而获取到相对于前一次坐标点的偏移量,并通过偏移量来修改View的坐标。这样不断的重复,就实现了滑动。
这篇文章,主要说下利用Scroller类来实现滑动,Scroller类比起他之前的说的那些方法,他有一个优势在于他的滑动效果是平滑的。

View中的坐标系

在Android中有两种坐标系,一种是Android坐标系,一种是视图坐标系。根据物理学知识,坐标系的选取不同,物体的移动会有不同的效果。
在Android坐标系中,坐标的原点是以屏幕的左上角为(0,0)。这个点向右为x轴正方向,这个点向下为y轴正方向。在滑动处理的时候,我们常常需要获得点的坐标,如果我们用getRawX()和getRawY()来获得该点的坐标,则这个坐标是相对于Android坐标系的坐标。
在视图坐标系中,坐标的原点是父视图的左上角为(0,0)。同样,这个点向右为x轴正方向,这个点向下为y轴正方向。我们常常用getX()和getY()来获得该点的坐标,则这个坐标就是视图坐标系的坐标,也就是说相对于父视图的相对坐标。
最后,我们总结一下这4个方法的具体含义,在后面的滑动时会经常遇到。

getX(): 获取点击事件距离控件左边的距离,即视图坐标

网友评论