Android中事件处理方法返回的布尔值是什么意思
在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
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**
点击屁股