onTouch如何返回false那么MotionEvent event的事件为什么都没了
时间: 2024-04-07 20:31:39 浏览: 8
当onTouch方法返回false时,表示当前View没有完全处理该事件,需要将事件传递给下一个View进行处理。因此,系统会将事件传递给下一个View,当前View对该事件的处理就结束了,事件也就"消失"了。如果下一个View也没有处理该事件,那么事件会继续传递给下一个View,直到有View处理该事件或者事件被取消。因此,在onTouch方法中返回false时,MotionEvent事件并没有"消失",而是被传递给了下一个View。
相关问题
Android onTouch返回值
在Android中,onTouch事件是一个触摸事件的回调函数,它会在用户触摸屏幕时被调用。onTouch事件的返回值是一个布尔值,表示是否消耗了该事件。如果返回true,则表示已经消耗了该事件,该事件不会再被传递到其他的监听器或者控件上。如果返回false,则表示该事件没有被消耗,该事件会被传递到其他的监听器或者控件上。
以下是一个简单的例子,演示了如何在onTouch事件中返回值:
```java
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 按下事件
return true; // 消耗该事件,不再传递到其他监听器或者控件上
case MotionEvent.ACTION_MOVE:
// 移动事件
break;
case MotionEvent.ACTION_UP:
// 抬起事件
break;
}
return false; // 该事件没有被消耗,会被传递到其他监听器或者控件上
}
```
我的这个view是一个TextureView它里面重写了public boolean onTouchEvent(MotionEvent event) { Log.e("setControlable", "onTouchEvent"); if (this.bControl) { return SimSendUDP.getInstance().onTouch((int)rawx, (int)rawy, event, this.controlIp, this.controlPort); } else { return super.onTouchEvent(event); } }方法
在 TextureView 中重写 onTouchEvent 方法并在其中处理触摸事件是一个常见的做法。在你的代码中,你处理了 onTouchEvent 事件并通过判断 bControl 来决定是否调用 SimSendUDP 的 onTouch 方法。
在移除 TextureView 时,如果 onTouchListener 仍然在执行,可能是因为 onTouch 事件正在处理动作。你可以尝试通过设置 bControl 为 false 来停止处理 onTouch 事件,例如:
```
// 停止处理 onTouch 事件
this.bControl = false;
// 移除 TextureView
parentView.removeView(textureView);
```
这样可以确保 onTouch 事件不会继续执行。如果问题仍然存在,可能需要检查代码中是否有其他地方在使用该 onTouchListener 对象,或者该对象是否被其他 View 引用。