gpt4 book ai didi

Android 会将快速单点触摸视为移动?

转载 作者:太空狗 更新时间:2023-10-29 15:16:36 24 4
gpt4 key购买 nike

我写了一个非常简单的 android 应用程序,我可以在 pad 上画一些东西。用手指触摸屏幕,你会看到一个绿色的球,移动你的手指,你会看到一条红线。

但是我发现了一个很奇怪的事情:如果我用两个手指一个接一个的快速触摸屏幕,它们之间会划一条线! (假设您正在按下键盘上的两个键 jkjkjkjkjkjjkjkjkjkjkjkj)

关键代码很简单:

public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
multiTouch = false;

id = event.getPointerId(0);
PointF p = getPoint(event, 0);
path = new Path();
path.moveTo(p.x, p.y);
paths.add(path);

points.add(copy(p));
break;
case MotionEvent.ACTION_POINTER_DOWN:
multiTouch = true;
for (int i = 0; i < event.getPointerCount(); i++) {
int tId = event.getPointerId(i);
if (tId != id) {
points.add(getPoint(event, i));
}
}
break;
case MotionEvent.ACTION_MOVE:
if (!multiTouch) {
p = getPoint(event, 0);
path.lineTo(p.x, p.y);
}
break;
}

invalidate();

return true;
}

完整的来源在这里:https://github.com/freewind/TouchTest/blob/master/src/com/example/MyImageView.java

这是一个工作演示:https://github.com/freewind/TouchTest

或者你可以在你的安卓设备上下载签名的apk,然后自己测试:https://github.com/freewind/TouchTest/blob/master/TouchTest.apk?raw=true

你可以在我的代码中看到,我已经检查了它是否是多点触控并且禁用了那种情况下的绘图。

我的android版本是4.0,我的code target是2.3.3

我的android pad上有一张图片:

enter image description here

你可以看到有一些线,但不应该,红线左边应该有一个绿色的球。

我不确定为什么 android 将快速单点触摸视为移动,我考虑了 3 个原因:

  1. 我的代码有问题
  2. Android sdk 有问题
  3. 我的 android pad 有问题,例如缺少 ACTION_DOWN 事件

如何找出真正的原因?


更新

我的一个 friend 用他的android手机(android 2.1)测试这个应用程序,发现没有红线,另一个用android 2.3.5,发现有红线。

请检查我的代码,我已经通过 ACTION_POINTER_DOWN 检查了多点触控,如果超过 1 个点,ACTION_MOVE 将不执行任何操作。所以点的id是不需要的。 (实际上,在此代码的第一个版本中,我使用了 id 但遇到了同样的问题)。

而且我不认为这是预期的行为,因为它使触摸程序的开发变得困难。我发现这个问题是因为在我的另一个应用程序(用户可以通过手指拖动/缩放/旋转图像)中,图像有时会在屏幕上“跳跃”。

我什至在我的 android pad 和 iTouch 上尝试了一个流行的游戏(水果忍者),发现 android 版本有问题但 iTouch 没有。

现在我确定有问题(第一个手指向上时缺少 ACTION_UP 事件),但我仍然不知道是什么原因导致的。我的安卓平板?还是安卓SDK?

最佳答案

这就是多点触控的工作方式。当你按下快速 android 将其作为手势处理时,你将有 2 个按下的指针。为避免它尝试处理 action_up,或改用 action_pointer_down

关于Android 会将快速单点触摸视为移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229224/

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