2017-09-07 10 views
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; 
     } 
    }; 

答えて

0

あなたの例から、実際に明確ではないが、

return mDetector.onTouchEvent(event); 

あなたは、これが最後の行でなければならないという要件を参照してくださいか、最後の行(https://developer.android.com/training/gestures/detector.html

+0

しなければならない?そうですか私はあなたがリンクしている医師にこのことについて言及していません。 – Cody

+0

これをテストした後、trueの代わりにtouchイベントを戻すと、ジェスチャ検出コードが破損します。 – Cody

+0

いいえ、イベントを処理した場合 - trueを返すと、スキップされたもの(デフォルト)はmDetector.onTouchEvent(event)を返す必要があります。大文字小文字を追加する: デフォルト:return mDetector.onTouchEvent(event); –

関連する問題