gpt4 book ai didi

android - dispatchTouchEvent 中的一次触摸注册了多次

转载 作者:行者123 更新时间:2023-12-05 00:11:35 24 4
gpt4 key购买 nike

我正在使用 dispatchTouchEvent 拦截 Activity 中的触摸。这是我重写方法的代码:

public boolean dispatchTouchEvent(MotionEvent ev) {
int[] l = new int[2];
mVideoImage.getLocationOnScreen(l);
int left = l[0];
int top = l[1];
int w = mVideoImage.getWidth();
int h = mVideoImage.getHeight();
float x = ev.getX();
float y = ev.getY();
if (x > left && x < (left + w) && y > top && y < (top + h)) {
startActivity(new Intent(getApplicationContext(), ActivityVideoPlayer.class));
}
else {
finish();
}
return super.dispatchTouchEvent(ev);
}

问题是每次我触摸屏幕时,dispatchTouchEvent 被调用 2 或 3 次(通常是 3 次),当条件中的代码执行 3 次时,它会启动 3 个 ActivityVideoPlayer Activity ,这是我不想要的.

为什么会发生这种情况,我如何从 1 次触摸中获得 1 次触摸,或者至少解决这个问题,这样我的 ActivityVideoPlayer 就不会启动 3 次?我想我可以用它做一个单顶,或者不管它是什么,它一次只能激活一个给定类型的 Activity ,现在我想到了,尽管知道这里发生了什么仍然很高兴。

我想知道是否没有为我触摸的屏幕上的每一层记录 1 次触摸( View + 它们所在的 View 组),在这种情况下,我似乎应该能够使用触摸在它到达多层之前。我尝试更改 dispatchTouchEvent 以返回 true 和 false 以查看是否可以,但没有成功。

提前致谢。

最佳答案

当使用 dispatchTouchEvent 时,你会在你的 Activity 中获取所有触摸,如果你只想检测一个触摸,你必须按类型过滤触摸,你可以使用 MotionEvent 参数来做到这一点。

if( ev.getAction() == MotionEvent.ACTION_UP){
//launch activity video player
}

关于android - dispatchTouchEvent 中的一次触摸注册了多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25872579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com