应用程序的目的:
一个简单的应用程序,它为屏幕上识别的每个触摸画一个圆圈并跟踪触摸事件。在“高压读数”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
我的问题:
- 我的代码只是错误的吗?
- Android 2.1 对触摸事件的处理能力是否不够好,会把事情搞混?
- 这是硬件问题,与1)和2)无关?
感谢您提供答案和/或重新链接到其他线程(抱歉可以找到解决此问题的问题)。
克里斯