アプリの目的:
画面上で認識されたすべてのタッチに対して円を描画し、タッチ イベントを追跡するシンプルなアプリ。「高圧読み取り」ではgetPressure (int pointerIndex)
、円の色が変わり、半径が大きくなります。getPointerId (int pointerIndex)
さらに、x 座標と y 座標、および圧力を含むタッチ ID が、指のタッチの横に表示されます。
重要な部分のコード スニペットをたどってください (これが最も適切なコードではないことをご容赦ください ;) 私は知っています)
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 がテスト プラットフォームです。アプリは正常に動作し、問題なく 2 本の指を追跡します。しかし、2 つの接触点が近づきすぎると、互いに干渉するように見えます。共有の x 軸と y 軸に「スナップ」して円を描いているように見えます。場合によっては、他のタッチ イベントの入力座標を交換することさえあります。もう 1 つの問題はgetPressure (int pointerIndex)
、PointerID を参照しているにもかかわらず、両方のタッチ イベントが同じ圧力測定値を持つことです。
これはすべて少し抽象的なので、ここでビデオを見つけてください: http://www.youtube.com/watch?v=bFxjFexrclU
私の質問:
- 私のコードは単に間違っていますか?
- Android 2.1 はタッチ イベントを十分に処理できず、混乱するのでしょうか?
- これはハードウェアの問題であり、1) および 2) とは関係ありませんか?
回答および/または他のスレッドへの再リンクをありがとうございます (この問題に対処するスレッドを見つけて申し訳ありません)。
クリス