现在的位置: 首页 > 综合 > 正文

andriod按键消息和触摸消息

2013年08月06日 ⁄ 综合 ⁄ 共 2231字 ⁄ 字号 评论关闭

  用户消息是指经过消息处理前端把硬件物理消息转化成framework内部定义的统一格式后的消息。消息分为三类

(1)按键消息

(2)触摸消息

(3)轨迹球消息

由于轨迹球消息不常用或者根本就没用过,就不介绍了。

一 按键消息

  按键消息的实现类是android.view.KeyEvent,该类定义了按键消息包含的所有参数及参数获取接口。

举例:

1.返回按键动作:总共三个动作

ACTION_DOWN,
ACTION_UP, or ACTION_MULTIPLE

Retrieve the action of this key event. May be either ACTION_DOWNACTION_UP,
or ACTION_MULTIPLE.

Returns:
The event action: ACTION_DOWN, ACTION_UP, or ACTION_MULTIPLE.
    public final int getAction() {
 

2.返回按键值

key event的按键值. This is the physical key that was pressed, not the Unicode character.

Returns:
The key code of the event.
    public final int getKeyCode() {
 

3.返回按键重复次数

Retrieve the repeat count of the event. For both key up and key down events, this is the number of times the key has repeated with the first down starting at 0 and counting up from there. For multiple key events,
this is the number of down/up pairs that have occurred.

Returns:
The number of times the key has repeated.
    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做的好。

抱歉!评论已关闭.