onTouch如何返回false那么MotionEvent event的事件为什么都没了
时间: 2024-04-07 14:31:39 浏览: 48
当onTouch方法返回false时,表示当前View没有完全处理该事件,需要将事件传递给下一个View进行处理。因此,系统会将事件传递给下一个View,当前View对该事件的处理就结束了,事件也就"消失"了。如果下一个View也没有处理该事件,那么事件会继续传递给下一个View,直到有View处理该事件或者事件被取消。因此,在onTouch方法中返回false时,MotionEvent事件并没有"消失",而是被传递给了下一个View。
相关问题
我的这个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 引用。
android studio ontouch
在Android Studio中,"onTouch"是一个关键的回调函数,它通常用于处理用户对视图(View)的触摸事件。当你需要响应屏幕上的点击、滑动、长按等交互行为时,可以在View或其子类的`View.onTouchEvent()`方法中实现自定义逻辑。
这个方法接收一个`MotionEvent`对象作为参数,该对象包含了所有关于触摸动作的信息,如位置、压力、时间等。开发者可以根据`MotionEvent.getAction()`返回的动作类型(ACTION_DOWN、ACTION_UP、ACTION_MOVE等),来执行相应的操作,比如更新UI状态、触发动画效果或执行其他业务逻辑。
例如,在Activity或Fragment中设置一个按钮并监听触碰事件:
```java
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
// 按下动作,执行相应操作
} else if (action == MotionEvent.ACTION_UP) {
// 松开动作,执行另一些操作
}
return false; // 默认处理方式,如果需要阻止系统默认处理,可以返回true
}
});
```
阅读全文