Android触控(一) 关于MotionEvent的学习

MotionEvent事件对象
 
一般来说我们都是在View的onTouchEvent方法中来处理MotionEvent对象的。
 
public boolean onTouchEvent(MoitonEvent event){
    int action = MotionEventCompat.getActionMasked(event);
        
    switch(action) {
        case (MotionEvent.ACTION_DOWN) :
            Log.d("DEBUG_TAG","Action was DOWN");
            return true;
        case (MotionEvent.ACTION_MOVE) :
            Log.d("DEBUG_TAG","Action was MOVE");
            return true;
        case (MotionEvent.ACTION_UP) :
            Log.d("DEBUG_TAG","Action was UP");
            return true;
        case (MotionEvent.ACTION_CANCEL) :
            Log.d("DEBUG_TAG","Action was CANCEL");
            return true;
        case (MotionEvent.ACTION_OUTSIDE) :
            Log.d("DEBUG_TAG","Movement occurred outside bounds of current screen element");
            return true;      
        default : 
            return super.onTouchEvent(event);
}
 
然后,获取事件的类型,获取事件发生的位置x、y轴坐标,根据位置来判断触发处理事件
 
(1)事件的类型  
一般通过event.getAction()获得事件类型,在android 2.2加入多点触控支持后,使用getActionMasked()方法获得。
主要事件有:
ACTION_DOWN 用户开始触摸(单点)
ACTION_MOVE
ACTION_UP 用户抬起手指
ACTION_CANCEL 表示首饰被取消了
ACTION_OUTSIDE 表示触摸超出了正常的UI边界
 
多点触摸:
ACTION_POINTER_DOWN 非主要触摸按下
ACTION_POINTER_UP 非主要触摸抬起
 
事件的类型是int类型,用到的只有低8位
 
(2)事件发生的位置(坐标)  
这里提一下几个坐标获取方法:
getX() 是表示widget相对于自身左上角的x坐标
getRawX() 表示相对于屏幕左上角的x坐标(这个坐标是手机的屏幕左上角,不管activity是否有titleBar或是否全屏)
getY() getRawY()同理
 
getTop() 按钮左上角相对于父view的y坐标
getLeft() 按钮左上角相对于父view的x坐标
getX(int pointerIndex)方法得到指定触摸索引的X坐标 
getY(int pointerIndex)方法得到指定触摸索引的Y坐标
MotionEvent的getPointerCount()方法,可以检查当前屏幕有多少个触摸点
 
(3)关于getActionMasked()和getActionIndex()方法  
这里需要提到动作掩码和触摸点索引掩码:
动作掩码 ACTION_MASK = 0x000000ff
触摸点索引掩码 ACTION_POINTER_INDEX_MASK = 0x0000ff00
 
getAction()方法返回的是int类型数值,用到的只有低16位即0x0000~0xffff。其中,低8位是触摸事件类型,高8位是触摸点索引值表示(单点为0,双点为1……)。
 
getActionMasked()方法,是将传来的动作值和ACTION_MASK动作掩码进行了与运算,将索引清0,得到纯动作值。
getActionIndex()方法,是将传来的动作值和ACTION_POINTER_INDEX_MASK触摸点索引掩码进行与运算再移位,得到纯索引值。
 
 
(4)一般使用建议  
一般我们要处理动作,推荐用switch结构,判断变量为:getActionMasked(),这样里面判断的动作可以是单点或多点触摸。

 

posted @ 2015-10-26 18:41  小米JustCode  阅读(540)  评论(0编辑  收藏  举报