跳到主要内容

事件分发中的 onTouch 和 onTouchEvent 有什么区别,又该如何使用?

参考答案:

在Android的事件分发机制中,onTouchonTouchEvent都是处理触摸事件的方法,但它们之间存在一些关键的区别。

  1. 定义和来源

    • onTouchViewOnTouchListener接口中定义的方法。当一个View绑定了一个OnTouchListener后,当有触摸事件触发时,就会调用onTouch方法。
    • onTouchEventActivity的一个方法,通过重写该方法来处理触摸事件。当屏幕有触摸事件时,这个方法就会被调用。
  2. 执行顺序

    • 在事件分发机制中,onTouch方法优先于onTouchEvent执行。如果onTouch方法通过返回true将事件消费掉,那么onTouchEvent将不再执行。
  3. 返回值

    • 这两个方法的返回值类型都是布尔型。对于onTouch方法,如果返回true,表示事件已经被处理,不再传递给其他方法。对于onTouchEvent方法,如果返回true,表示该事件已经被处理且不希望其他回调方法再次处理,否则返回false
  4. 使用场景

    • onTouch方法的使用需要两个前提条件:首先,mOnTouchListener的值不能为空;其次,当前点击的控件必须是可启用的(enabled)。如果有一个控件是非启用的,那么给它注册onTouch事件将永远得不到执行。对于这类控件,如果想要监听其触摸事件,可以通过在该控件中重写onTouchEvent方法来实现。
    • onTouchEvent方法通常用于处理Activity级别的触摸事件,或者在View级别中,当onTouch方法不适用或未定义时。

总的来说,onTouchonTouchEvent在Android的事件分发机制中各自扮演了不同的角色。onTouch通常用于处理特定View的触摸事件,而onTouchEvent则用于处理Activity级别的触摸事件或在View级别中作为备选方案。在使用时,需要根据具体需求和场景选择合适的方法,并理解它们之间的执行顺序和返回值对事件处理的影响。