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

时间:2012-09-01 15:54:18

标签: android touch

我写了一个非常简单的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

或者您可以在Android设备上下载已签名的apk,并自行测试:https://github.com/freewind/TouchTest/blob/master/TouchTest.apk?raw=true

你可以在我的代码中看到,我已经检查过它是否是多点触控并禁用了该情况。

我的Android版本是4.0,我的代码目标是2.3.3

我的android pad上有一张图片:

enter image description here

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

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

  1. 我的代码有问题
  2. Android sdk有错误
  3. 我的android pad有问题,例如缺少ACTION_DOWN事件
  4. 如何找出真正的原因?


    更新

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

    请查看我的代码,我已经ACTION_POINTER_DOWN检查了多点触控,如果超过1分,我将对ACTION_MOVE无效。所以不需要id点。 (实际上,在我的第一个版本的代码中,我使用了id,但却有同样的问题。)

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

    我甚至在我的android pad和iTouch上尝试过一款热门游戏(Fruit Ninja),发现android版本有问题,但iTouch没有。

    现在我确定出现了问题(在第一次手指抬起时错过ACTION_UP事件),但我仍然不知道是什么原因造成的。我的android垫?还是Android sdk?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以检查触摸的ID,这样您就只能处理第一次触摸。

或者,您可以监控所有触摸并一起处理它们。