面试:事件处理机制之onTouch()与onTouchEvent
OnTouchEvent()方法:
onTouchEvent是手机屏幕事件的处理方法,是获取的对屏幕的各种操作,比如向左向右滑动,点击返回按钮等等。属于一个宏观的屏幕触摸监控。onTouchEvent方法是override 的Activity的方法。重新了Activity的onTouchEvent方法后,当屏幕有touch事件时,此方法就会被调用。
public boolean onTouchEvent(MotionEvent event)
event
:参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。
返回值
:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。
OnTouch方法:
onTouch()是OnTouchListener接口的方法,它是获取某一个控件的触摸事件,因此使用时,必须使用setOnTouchListener绑定到控件,然后才能鉴定该控件的触摸事件。当一个View绑定了OnTouchLister后,当有touch事件触发时,就会调用onTouch方法。通过getAction()方法可以获取当前触摸事件的状态:
ACTION_DOWN
:表示按下了屏幕的状态。
ACTION_MOVE
:表示为移动手势
ACTION_UP
:表示为离开屏幕
ACTION_CANCEL
:表示取消手势,不会由用户产生,而是由程序产生的
myImage.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {//当前状态
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;//还回为true,说明事件已经完成了,不会再被其他事件监听器调用
}
});
二者区别如下:
1、如果setOnTouchListener中的onTouch
方法返回值是true(事件被消费)时,则onTouchEvent
方法将不会被执行;
2、只有当setOnTouchListener中的onTouch
方法返回值是false(事件未被消费,向下传递)时,onTouchEvent
方法才被执行。
3、以上说的情况适用于View对象(事件会最先被最内层的View对象先响应)而不是ViewGroup对象(事件会最先被最外层的View对象先响应)。
综合来讲:
onTouchListener的onTouch
方法优先级比onTouchEvent
高,会先触发。
假如onTouch
方法返回false,会接着触发onTouchEvent
,反之onTouchEvent
方法不会被调用。
内置诸如click事件的实现等等都基于onTouchEvent
,假如onTouch
返回true,这些事件将不会被触发。
内容转载至:http://blog.csdn.net/guyuealian/article/details/51637033