マルチタッチを処理する必要のあるアプリケーションを開発しています。基本的に私は回転のためのワンタッチが欲しいです(これは問題ありません)。スクロール用のマルチタッチ。マルチタッチをコーディングする方法
私は基本的なコードを持っていますが、シングルからマルチタッチ、およびバイカの移動が発生すると問題が発生します。基本的には、マルチタッチの中央位置(2本の指)と1本の指の絶対位置が離れているため、動きが激しくなります。だから私が画面上に2本の指を持っていれば、彼らは中央の位置を作り、1本の指を持ち上げると、中央の位置から絶対的な1本の指の位置への素早い動きのようになります。これは私が望まない動きです。
これは私のコードです:
@Override
public boolean onTouchEvent(MotionEvent event) {
float xEvent[] = new float[ 2 ];
float yEvent[] = new float[ 2 ];
switch(event.getPointerCount()) {
case 1:
xEvent[ 0 ] = event.getX(0);
yEvent[ 0 ] = event.getY(0);
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
camera.onTouchDown(xEvent[ 0 ], yEvent[ 0 ]);
return true;
case MotionEvent.ACTION_MOVE:
camera.onTouchRotate(xEvent[ 0 ], yEvent[ 0 ]);
return true;
default: return super.onTouchEvent(event);
}
case 2:
xEvent[ 0 ] = event.getX(0);
yEvent[ 0 ] = event.getY(0);
xEvent[ 1 ] = event.getX(1);
yEvent[ 1 ] = event.getY(1);
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
camera.onTouchDown(((xEvent[ 0 ] + xEvent[ 1 ])/2), ((yEvent[ 0 ] + yEvent[ 1 ])/2));
return true;
case MotionEvent.ACTION_MOVE:
camera.onTouchSlide(((xEvent[ 0 ] + xEvent[ 1 ])/2), ((yEvent[ 0 ] + yEvent[ 1 ])/2));
return true;
case MotionEvent.ACTION_POINTER_1_UP:
camera.onTouchDown(xEvent[ 1 ], yEvent[ 1 ]);
return true;
case MotionEvent.ACTION_POINTER_2_UP:
camera.onTouchDown(xEvent[ 0 ], yEvent[ 0 ]);
return true;
default: return super.onTouchEvent(event);
}
default: return false;
}
}
カメラのonTouchDown機能だけでタッチ移動の最初の値を設定します。そのため、マルチタッチからシングルタッチの動きに新しい値を設定するアップ動作にもこの機能を使用しています。
誰かが自分の問題点を知っていて、さらに助けてくれることを願っています。
Thanx!私はちょうど80%働く1つの実装を終了しました。しかし、そのリンクを読んだ後、私はマスクとIDを使ってうまくいくと思います。 – Espen