(1)按键消息
(2)触摸消息
(3)轨迹球消息
由于轨迹球消息不常用或者根本就没用过,就不介绍了。
一 按键消息
按键消息的实现类是android.view.KeyEvent,该类定义了按键消息包含的所有参数及参数获取接口。
举例:
1.返回按键动作:总共三个动作
ACTION_DOWN, ACTION_UP, or ACTION_MULTIPLE
ACTION_DOWN
,
ACTION_UP
, or
ACTION_MULTIPLE
.
2293
2294
public final int getAction() {
2.返回按键值
2339
2340
public final int getKeyCode() {
3.返回按键重复次数
2374
2375
public final int getRepeatCount() {
源码可以在这里在线查看
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/view/KeyEvent.java#KeyEvent.0mSource
当用户按下按键时,只要手不拿开,会有好多次的按键事件触发,按键次数从0开始,0,1,2,3,4....
在android中0到1这个过程中时间稍微长点,这是为什么呢?这是android专门做的延迟处理,防止在手按下之后触发多次按键消息,将会产品非常不好的体验。
在android中,在把按键消息发送给view系统的时候,前端view系统前端已经处理了延迟。在view内部同时也做了长按监测。
从按下消息开始到发生长按消息,消息处理回调的时间由两部分组成,一次是消息处理前端所处理的第一次延迟,另个是view内部定义的一个长按时限。
二 触摸消息
代表触摸消息的类是android.view.MotionEvent
源码在http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/view/MotionEvent.java#MotionEvent
常用的主要方法:
getAction():获取消息的动作,触摸消息的动作比较多,也比较复杂,涉及到多点触控。
getSize(),getSize(int index):用来获取手指触摸屏上的按下的面积大小,只有在电容屏下的屏幕此方法可用(电阻屏只能获得一个点)。不带参数的是第一个点的触摸面积
,带参数的代表第几个手指按下的的面积,注意index从0开始
getX(),getX(int index),getY(),getY(int index):这四个方法代表获得按下的那个点的x,y的坐标,带参数的是多点触控时用到的
getEventTime(),getDownTime():前者是获取本次消息发生的时间,后者代表获得按下消息的时间。如果本次消息是按下消息,两者值相同。如果本次消息不是
按下消息,前者是距离本次消息的最近一次消息的发生时间。
getPressure(),getPressure(int index):获得按下的力量大小,范围是0-1,有的设备也可能会大于1.
遗憾的是android的view系统并没有对多点触控提供标准的消息处理,比如像两个手指缩放图片的两指触控操作。因为没有给提供这样的回调,程序员必须自己去实现
根据原始的触摸消息,进行对相应的动作进行判断,显然,作为android程序员的我们苦逼了。不过话又说回来了,可以大大提高程序员的创造力。
在实际开发中大家是否遇到过这样的问题,实现滑动操作的时候,当刚按下手指的时候,屏幕会闪屏或者抖动。知道这是为什么吗?当我们按下触发了一个Down动作,之后会很多的Move动作,即使就移动了一个像素点,也触发move动作,每个move动作都去做了滑动屏幕的处理,这样就出现了抖动。怎么处理这个过程,需要去根据经验找到一个距离差,做防抖动逻辑的处理。这方面iphone做的好。