gpt4 book ai didi

android - MotionEvent 多个触摸事件混淆并相互影响(参见演示视频)

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:18 28 4
gpt4 key购买 nike

应用的用途:

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

下面是重要部分的代码 fragment (请原谅我这不是最好的代码;)我知道)

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) 无关?

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

克里斯

最佳答案

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

Nexus One 中使用的触控面板(我相信它与 HTC Desire 中使用的硬件相同)因这个特殊的 Artifact 而闻名。我们做了一些工作,通过删除一些可检测到的不良事件来缓解 Android 2.2 的 ACTION_POINTER_UP/DOWN 事件周围的“跳到另一根手指的轴”问题,但是当指针沿着一个轴靠近时问题仍然存在。该面板还以随机反转 X 和 Y 坐标数据而闻名;两点 (x0, y0) 和 (x1, y1) 变成 (x0, y1) 和 (x1, y0)。遗憾的是,当 Android 本身获取“真实”数据时,您能做的只有这么多。

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

关于android - MotionEvent 多个触摸事件混淆并相互影响(参见演示视频),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784607/

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