0
私のアプリではOnTouchListener()
という視点でタッチしていますが、何らかの理由でアプリがランダムに検出できるポインタの最大数が10から2に減少します。私がバグを再現できる唯一の方法は、複数の指で画面をすばやくタップすることであり、それでも矛盾しています。Androidマルチタッチバグ:最大ポインタ数が2にランダムに落ちる
以下のコードを使用して、画面に出入りするタッチのIDを記録します。ログは最大10回の同時呼び出しで良好に追跡されますが、前述のバグが発生するとログには最大2つのポインタIDが同時に表示されます。
これは私のGalaxy S6 Edgeのハードウェアグリッチですか?新しいタッチがモーションイベントをトリガーしない理由をテストする方法はありますか?
View.OnTouchListener touch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//check if user flung the screen
mDetector.onTouchEvent(event);
// get masked (not specific to a pointer) action
int maskedAction = event.getActionMasked();
// get pointer index from the event object
int pointerIndex = event.getActionIndex();
// get pointer ID
int pointerId = event.getPointerId(pointerIndex);
switch (maskedAction) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:{
Log.d(LOG_TAG, "Pointer down = " + Integer.toString(pointerId));
break;
}
case MotionEvent.ACTION_MOVE: {
int numberOfPointers = event.getPointerCount(); //fetch number of active pointers
for (int i = 0; i < numberOfPointers; i++) {
//do stuff
}
break;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
Log.d(LOG_TAG, "Pointer cleared = " + Integer.toString(pointerId));
break;
}
return true;
}
};
しなければならない?そうですか私はあなたがリンクしている医師にこのことについて言及していません。 – Cody
これをテストした後、trueの代わりにtouchイベントを戻すと、ジェスチャ検出コードが破損します。 – Cody
いいえ、イベントを処理した場合 - trueを返すと、スキップされたもの(デフォルト)はmDetector.onTouchEvent(event)を返す必要があります。大文字小文字を追加する: デフォルト:return mDetector.onTouchEvent(event); –