Android App开发进阶与项目实战
上QQ阅读APP看书,第一时间看更新

2.2.2 接管手势事件处理

dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent三个方法的输入参数都是手势事件MotionEvent,其中包含触摸动作的所有信息,各种手势操作都从MotionEvent中获取触摸信息并判断处理。

下面是MotionEvent的常用方法:

  • getAction:获取当前的动作类型。动作类型的取值说明见表2-2。

表2-2 动作类型的取值说明

  • getEventTime:获取事件时间(从开机到现在的毫秒数)。
  • getX:获取在控件内部的相对横坐标。
  • getY:获取在控件内部的相对纵坐标。
  • getRawX:获取在屏幕上的绝对横坐标。
  • getRawY:获取在屏幕上的绝对纵坐标。
  • getPressure:获取触摸的压力大小。
  • getPointerCount:获取触控点的数量,如果为2就表示有两个手指同时按压屏幕。如果触控点数目大于1,坐标相关方法就可以输入整数编号,表示获取第几个触控点的坐标信息。

为方便理解MotionEvent的各类触摸行为,下面是单点触摸的示例代码:

(完整代码见event\src\main\java\com\example\event\TouchSingleActivity.java)

单点触摸的效果如图2-9~图2-11所示。图2-9为手势按下时的检测结果,图2-10为手势移动时的检测结果,图2-11为手势提起时的检测结果。

图2-9 手势按下时的检测结果

图2-10 手势移动时的检测结果

图2-11 手势提起时的检测结果

除了单点触摸,智能手机还普遍支持多点触控,即响应两个及以上手指同时按压屏幕。多点触控可用于操纵图像的缩放与旋转操作以及需要多点处理的游戏界面。

下面是处理多点触控的示例代码:

(完整代码见event\src\main\java\com\example\event\TouchMultipleActivity.java)

多点触控的效果如图2-12和图2-13所示。图2-12为两个手指一起按下时的检测结果,图2-13为两个手指一齐提起时的检测结果。

图2-12 两个手指一齐按下时的检测结果

图2-13 两个手指一齐提起时的检测结果