当我们用手指滑动一个控件View,从本质上来说就是移动一个View,改变其当前所处的位置,它的实现原理与动画效果的实现类似,都是通过不断的改变View的坐标来实现这个效果。相比于老版本中的控件的操作是点击和长按,而目前基本上应用都利用了滑动的操作方式来增加用户的体验,所以有必要来了解下Android的控件滑动的几种方法。
在实现滑动效果之前,首先先认识下Android中窗口坐标体系和屏幕的触摸事件----MotionEvent.
Android获取控件的位置,一般有两类方法,一个是通过getRawX()、getRawY()方法,一个是通过getX()、getY()方法。而这两种方法获取的值,在意义上说是由区别的,前者是以系统屏幕上左上角顶点为原点;后者以父视图的左上角为坐标原点的。如下图所示:
触摸控制事件主要有以下几种动作::ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_CANCEL, ACTION_OUTSIDE, ACTION_POINTER_DOWN , ACTION_POINTER_UP
通常情况下,我们会在onTounchEvent(MotionEvent event)方法中通过event.getAction()的方法来获取触摸控件事件的类型,并使用switch-case方法进行筛选。代码如下:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN://处理手指按下事件
break;
case MotionEvent.ACTION_MOVE://处理手指移动事件
break;
case MotionEvent.ACTION_UP://处理手指离开事件
break;
}
return true;//表示本控件拦截触摸事件
}
我们可以通过系统提供的API进行View的滑动,实现方法有多种,但基本思想都是一致的,即当触摸View时,系统记下当前触摸点的坐标,当手指移动时,系统记下移动后的触摸点坐标,从而获取到相对于前一次坐标点的偏移量,并通过偏移量来修改View的坐标,这样不断的重复,从而实现滑动的效果。