Android中事件处理方法返回的布尔值是什么意思

Android中事件处理方法返回的布尔值是什么意思,android,events,touch,return,listener,Android,Events,Touch,Return,Listener,在android中,大多数事件侦听器方法都返回布尔值。该真/假值是什么意思?它将对后续事件产生什么影响 class MyTouchListener implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { logView.showEvent(event); return true; } } 关于上面的例子,如果在on

在android中,大多数事件侦听器方法都返回布尔值。该真/假值是什么意思?它将对后续事件产生什么影响

class MyTouchListener implements OnTouchListener {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        logView.showEvent(event);
        return true;
    }
}
关于上面的例子,如果在onTouch方法中返回true,我发现每个触摸事件(向下、向上、移动等)都已根据我的日志视图捕获。相反,如果return为false,则只捕获了一个DOWN事件。因此,看来返回false将阻止事件传播。我说得对吗


此外,在OnTestureListener中,许多方法也必须返回布尔值。它们有相同的含义吗?

布尔值决定事件是否被消费


是的,你说得对。如果返回false,则下一个侦听器将处理该事件。如果返回true,则该事件将由侦听器使用,而不会发送到下一个方法。

布尔值确定是否使用该事件

是的,你说得对。如果返回false,则下一个侦听器将处理该事件。如果返回true,则事件将由侦听器使用,而不会发送到下一个方法。

来自文档:,android.view.MotionEvent)

如果侦听器已使用事件,则为True,否则为false

如果返回true,则会处理该事件。如果为false,它将转到下一层。

来自文档:,android.view.MotionEvent)

如果侦听器已使用事件,则为True,否则为false


如果返回true,则会处理该事件。如果为false,它将转到下一层。

如果您从
动作下的
事件返回
true
,则您对该手势中的其余事件感兴趣。在这种情况下,“手势”指的是直到最后一次
操作启动
操作取消
之前的所有事件。从
操作向下返回
false
,表示您不想要该事件,其他视图将有机会处理它。如果有重叠视图,则可以是同级视图。如果没有,它将冒泡到父级。

如果您从
动作下的
事件返回
true
,则您对该手势中的其余事件感兴趣。在这种情况下,“手势”指的是直到最后一次
操作启动
操作取消
之前的所有事件。从
操作向下返回
false
,表示您不想要该事件,其他视图将有机会处理它。如果有重叠视图,则可以是同级视图。如果不是的话,它将冒泡到父级。

我在故障排除中损失了将近一天,但我仍然发现,我的onTouch函数在使用true时被调用了2次,在使用false时被调用了1次。

我在故障排除中损失了将近一天,但我仍然发现,我的onTouch函数在使用true时被调用2次,在使用false时被调用1次。

来自

注意:Android将首先调用事件处理程序,然后从类定义中调用相应的默认处理程序。因此,从这些事件侦听器返回true将停止事件向其他事件侦听器的传播,并且还将阻止对视图中默认事件处理程序的回调。因此,请确保在返回true时要终止事件。

来自


注意:Android将首先调用事件处理程序,然后从类定义中调用相应的默认处理程序。因此,从这些事件侦听器返回true将停止事件向其他事件侦听器的传播,并且还将阻止对视图中默认事件处理程序的回调。因此,请确保您希望在返回true时终止事件。

以上所有答案都是正确的,但如果视图是可单击的,则结果不同

示例,我有一个
线性布局
包含1个
按钮
和1个
文本视图
,如下所示

<LinearLayout
    android:id="@+id/linearlayout_root"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0aa"
    android:orientation="vertical">

    <Button
        android:id="@+id/button_click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="40dp"
        android:text="Button Click"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/textview_click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="40dp"
        android:text="TextView Click"
        android:textSize="20sp"
        android:background="#e4e4e4"
        />

</LinearLayout>
单击文本视图

TAG: TextView onTouch eventDOWN
TAG: LinearLayout onTouch eventDOWN
TAG: TextView onTouch event DOWN
TAG: TextView onTouch event MOVE
TAG: TextView onTouch event UP
TAG: TextView onTouch event DOWN
TAG: LinearLayout onTouch event DOWN
TAG: LinearLayout onTouch event MOVE
TAG: LinearLayout onTouch event UP
单击线性布局

TAG: LinearLayout onTouch eventDOWN
Similar to case 1
TAG: LinearLayout onTouch event DOWN
TAG: LinearLayout onTouch event MOVE
TAG: LinearLayout onTouch event UP
案例2
线性返回**FALSE**
按钮返回**TRUE**
文本查看返回**TRUE**
点击按钮

I/TAG: Button onTouch eventDOWN
I/TAG: Button onTouch eventMOVE
I/TAG: Button onTouch eventUP
Similar to case 1
Similar to case 1
单击文本视图

TAG: TextView onTouch eventDOWN
TAG: LinearLayout onTouch eventDOWN
TAG: TextView onTouch event DOWN
TAG: TextView onTouch event MOVE
TAG: TextView onTouch event UP
TAG: TextView onTouch event DOWN
TAG: LinearLayout onTouch event DOWN
TAG: LinearLayout onTouch event MOVE
TAG: LinearLayout onTouch event UP
单击线性布局

TAG: LinearLayout onTouch eventDOWN
Similar to case 1
TAG: LinearLayout onTouch event DOWN
TAG: LinearLayout onTouch event MOVE
TAG: LinearLayout onTouch event UP
案例3
线性点击返回**TRUE**
点击返回**FALSE**
文本查看点击返回**FALSE**
点击按钮

I/TAG: Button onTouch eventDOWN
I/TAG: Button onTouch eventMOVE
I/TAG: Button onTouch eventUP
Similar to case 1
Similar to case 1
单击文本视图

TAG: TextView onTouch eventDOWN
TAG: LinearLayout onTouch eventDOWN
TAG: TextView onTouch event DOWN
TAG: TextView onTouch event MOVE
TAG: TextView onTouch event UP
TAG: TextView onTouch event DOWN
TAG: LinearLayout onTouch event DOWN
TAG: LinearLayout onTouch event MOVE
TAG: LinearLayout onTouch event UP
单击线性布局

TAG: LinearLayout onTouch eventDOWN
Similar to case 1
TAG: LinearLayout onTouch event DOWN
TAG: LinearLayout onTouch event MOVE
TAG: LinearLayout onTouch event UP
  • TextView
    的默认值是
    不可点击
    ,如果我们在xml中设置
    android:clickable=“true”
    ,或者在设置
    TextView.setOnClickListener(…)
    时,它将变为可点击
  • 调试时,
    事件移动
    可以调用多于我的日志(取决于点击方式)
总结
  • onTouch
    返回
    true
    或视图可单击
    
    ,视图将接收所有的
    onTouchEvent
  • onTouch
    返回
    false
    且视图不可单击
,视图将不接收下一个onTouchEvent(其父级可能会接收它) 希望能有所帮助

以上所有答案都是正确的,但如果视图是
可点击的
或不是
可点击的

示例,我有一个
线性布局
包含1个
按钮
和1个
文本视图
,如下所示

<LinearLayout
    android:id="@+id/linearlayout_root"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0aa"
    android:orientation="vertical">

    <Button
        android:id="@+id/button_click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="40dp"
        android:text="Button Click"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/textview_click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="40dp"
        android:text="TextView Click"
        android:textSize="20sp"
        android:background="#e4e4e4"
        />

</LinearLayout>
单击文本视图

TAG: TextView onTouch eventDOWN
TAG: LinearLayout onTouch eventDOWN
TAG: TextView onTouch event DOWN
TAG: TextView onTouch event MOVE
TAG: TextView onTouch event UP
TAG: TextView onTouch event DOWN
TAG: LinearLayout onTouch event DOWN
TAG: LinearLayout onTouch event MOVE
TAG: LinearLayout onTouch event UP
单击线性布局

TAG: LinearLayout onTouch eventDOWN
Similar to case 1
TAG: LinearLayout onTouch event DOWN
TAG: LinearLayout onTouch event MOVE
TAG: LinearLayout onTouch event UP
案例2
线性返回**FALSE**
按钮返回**TRUE**
文本查看返回**TRUE**
点击屁股