【Android开发】事件类MotionEvent的一些认识

来源:互联网 发布:动漫海报淘宝店推荐 编辑:程序博客网 时间:2024/06/08 07:36

 一、动作常量,ACTION_...
 
 ACTION_DOWN 单点触摸动作
 ACTION_MOVE 触摸点移动动作
 ACTION_UP 单点触摸离开动作
 ACTION_POINTER_DOWN 多点触摸动作
 ACTION_POINTER_UP 多点触摸离开动作
 
 掩码常量
 ACTION_MASK = 0X000000ff 动作掩码
 ACTION_POINTER_INDEX_MASK = 0X0000ff00 触摸点索引掩码

二、相关方法详解
getAction()方法返回的是int类型,用到的只有低16位
其中:低八位是动作的表示,高8位是触摸点索引值的表示(单点为0,双点为1)


getActionMasked()方法是传来的动作值和ACTION_MASK(动作掩码)相与,把索引值清0,即获得纯动作值。


getActionIndex()方法是传来的动作值和ACTION_POINTER_INDEX_MASK(触摸点索引掩码)相与,得到纯索引值(0或者1)


getX(int pointerIndex)方法是指定触摸索引的X坐标
getY(int pointerIndex)方法是指定触摸索引的Y坐标
(pointerIndext=0表示单点触摸,=1表示双点触摸)




三、onTouch()方法或者是onTouchEvent()方法使用
        在设置事件时我们有2种设置的方式,一种是委托式一种是回调式。第一种就是将事件的处理委托给监听器处理,你可以定义一个View.OnTouchListener接口的子类作为监听器,其中有onTouch()方法。而第二种是重写View类自己本身的onTouchEvent方法,也就是控件自己处理事件。onTouch方法接收一个MotionEvent参数和一个View参数,而onTouchEvent方法仅接收MotionEvent参数。这是因为监听器可以监听多个View控件的事件。通过MotionEvent方法getation可以得到该Motionevent具体是哪个操作如ACTION_DOWN

注意:如果都覆写了两个方法,系统会执行监听器中的回调方法


四、总结:
要进行动作的处理,推荐使用switch结构,判断变量为:getActionMasked().这样里面判断的动作可以为单点触摸,多点触摸。


例子:


@Override
public boolean onTouchEvent(MotionEvent e){
switch(e.getActionMasked()){
case MotionEvent.ACTION_DOWN:
System.out.println("singleDown");
break;

case MotionEvent.ACTION_UP:
System.out.println("singleUp");
break;

case MotionEvent.ACTION_MOVE:
// System.out.println("move");
break;

case MotionEvent.ACTION_POINTER_DOWN:
System.out.println("doubleDown");
break;

case MotionEvent.ACTION_POINTER_UP:
System.out.println("doubleUp");
break;

}

return true;
}




如:两指手指同时触摸屏幕,会出现
singleDown
doubleDown



同时离开的时候,会出现:
doubleUp
singleUp


对于以上结果,发现规律了没有,可以利用这点,来实现单点拖动图片,多点缩放图片的效果了,关于这点,在之后我会发表实现的原理。

android sdk对于这个类的描述中就有这么一句:


For efficiency, motion events with ACTION_MOVE may batch together multiple movement samples within a single object.


我翻译下:"出于效率的考虑,事件代码为ACTION_MOVE的Motion,会在一个MotionEvent对象中包含多个移动数据采样."



这一句大家慢慢参详吧




原创粉丝点击