3

应用程序的目的:

一个简单的应用程序,它为屏幕上识别的每个触摸画一个圆圈并跟踪触摸事件。在“高压读数”getPressure (int pointerIndex)上,圆圈的颜色会改变,半径会增加。此外,带有 x 和 y 坐标以及压力的触控 IDgetPointerId (int pointerIndex)显示在手指触控旁边。

遵循重要部分的代码片段(请原谅我这不是最好的代码;)我知道)

protected void onDraw(Canvas canvas){

    //draw circle only when finger(s) is on screen and moves 
    if(iTouchAction == (MotionEvent.ACTION_MOVE)){
        int x,y;
        float pressure;

        //Draw circle for every touch
        for (int i = 0; i < touchEvent.getPointerCount(); i++){
            x = (int)touchEvent.getX(i);
            y = (int)touchEvent.getY(i);
            pressure = touchEvent.getPressure(i);

            //High pressure
            if (pressure > 0.25){
                canvas.drawCircle(x, y, z+30, pressureColor);
                canvas.drawText(""+touchEvent.getPointerId(i)+"  | "+x+"/"+y, x+90, y-80, touchColor);
                canvas.drawText(""+pressure, x+90, y-55, pressureColor);
            }else{ //normal touch event 
                canvas.drawCircle(x, y, z, touchColor);
                canvas.drawText(""+touchEvent.getPointerId(i)+" | "+x+"/"+y, x+60, y-50, touchColor);
                canvas.drawText(""+pressure, x+60, y-25, pressureColor);
            }
        }           
    }
}

问题:

运行 Android 2.1 的 HTC Desire 是测试平台。该应用程序运行良好,可以毫无问题地跟踪两个手指。但是,当两个接触点靠得很近时,它们似乎会相互干扰——看起来它们围绕着一个共享的 x 轴和 y 轴旋转。有时他们甚至交换另一个触摸事件的输入坐标。另一个问题是即使getPressure (int pointerIndex)引用一个 PointerID 两个触摸事件都具有相同的压力读数。

由于这有点抽象,请在此处找到视频:http ://www.youtube.com/watch?v=bFxjFexrclU

我的问题:

  1. 我的代码只是错误的吗?
  2. Android 2.1 对触摸事件的处理能力是否不够好,会把事情搞混?
  3. 这是硬件问题,与1)和2)无关?

感谢您提供答案和/或重新链接到其他线程(抱歉可以找到解决此问题的问题)。

克里斯

4

2 回答 2

3

我不想告诉你这个,但这是你的硬件。

Nexus One 中使用的触控面板(我相信它与 HTC Desire 中使用的硬件相同)以这种特殊的神器而闻名。我们做了一些工作,通过丢弃一些可检测到的错误事件来缓解 Android 2.2 的 ACTION_POINTER_UP/DOWN 事件周围的“跳转到其他手指的轴”问题,但是当指针沿着一个轴靠近时问题仍然存在。该面板还以随机反转 X 和 Y 坐标数据而闻名;两点 (x0, y0) 和 (x1, y1) 变为 (x0, y1) 和 (x1, y0)。可悲的是,当“真实”数据在 Android 本身掌握它时已经消失时,你能做的只有这么多。

这并不是唯一具有多点触控功能的面板。要在运行时判断您的屏幕是否能够准确报告多点触控数据而不会出现此类问题,请使用 PackageManager 检查FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT. 如果您没有此功能可用,您仍然可以可靠地执行简单的操作,例如缩放手势。

于 2010-09-24T17:53:37.323 回答
1

以前有人尝试过针对旧机器人上的多点触控手势进行此修复吗?我计划为我自己的项目评估它,因为它还处理 android 1.x/2.x 错误多点触控。

Luke 似乎已经涵盖了此处描述的问题以及 3.x 之前的设备上的其他常见触摸输入问题。

希望它有帮助,干杯。

于 2012-06-27T18:37:36.017 回答