5

タブ ホストに基づいており、フラグメントを使用するプロジェクトがあります。

1 つのタブに listFragment があり、ユーザーがセルをタップして別のフラグメントに移動し、

そこから、ユーザーはそのタブのフラグメント間をスワイプできます。

listFragment のセルに移動するまで、プロジェクトは機能しています。

そこで、左または右へのスワイプを検出して、それに応じてフラグメントを変更する必要があります。

ここに私のコード:

public class PrepareSkin extends Fragment implements OnGestureListener{

      private static final int SWIPE_MIN_DISTANCE = 120;
       private static final int SWIPE_MAX_OFF_PATH = 250;
       private static final int SWIPE_THRESHOLD_VELOCITY = 200;

       private GestureDetector gestureScanner;


    @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
       Bundle savedInstanceState) {


        gestureScanner = new GestureDetector(this);


      // TODO Auto-generated method stub
      View myFragmentView = inflater.inflate(R.layout.prepare_skin, container, false);

       Log.i("Mirko", "CREATO <<");


      return myFragmentView;
     }

       public boolean onTouchEvent(MotionEvent me)
       {
        return gestureScanner.onTouchEvent(me);
       }

    @Override
    public boolean onDown(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        try {
               if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                   return false;
               // right to left swipe
               if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                   Log.i("Mirko", "LEFTERS <<");


               }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                   Log.i("Mirko", "rIGTHERS >>");

               }
               else if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
               }  else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
               }
           } catch (Exception e) {
               // nothing
           }

                   return true;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
            float distanceY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

}

ジェスチャ認識機能が機能しないのはなぜですか?

ありがとう、

4

1 に答える 1

1

このリンクはあなたの路地のようです:Android Fragment onCreateView with Gestures

これらはクラスに実装OnGestureListenerするのではなく、view 全体に clickListener をアタッチしてから Gesture Listener をそのようにトリガーしますが、それでもコードのスニペットに適用する必要があります。

もう 1 つの簡単な解決策はonDown()、false として返すことです。おそらく、true として返す必要があります。onUp()Android がifを事前にonDown()返さないと認識しないことはわかっています。true

于 2014-05-30T16:42:12.900 に答える