1

を使用GestureDetectorしてonFling()呼び出しています。私が作成したログメッセージをトリガーするので、フリングを正しく検出しているようです。フリングの方向を特定しようとしていますが、問題が発生しています。MotionEventx の値は、メソッドに渡された両方のオブジェクトで同じであるためonFling()、方向を判断できません。たとえば、次のようになります。

08-05 16:36:08.679: DEBUG/mView(14616): fling2: 131.0 131.0

私がする時:

Log.d("mView", "fling2: " + e1.getX() + " " + e2.getX());

フリングを実行するとき、私は指を水平に動かしているだけなので、これは私には意味がありません. ここで何がうまくいかないのでしょうか?

4

1 に答える 1

2

droidQuery を使用できます: https://github.com/phil-brown/droidQuery。それは本当にあなたのコードを簡素化し、使いやすくします。アクティビティ onCreate() に入れる必要があるのは次のとおりです。

//global variables
private boolean isSwiping = false;
private SwipeDetector.Direction swipeDirection = null;
private View v;//set to the parent layout of the fragments.

//swipe-handling code
$.with(v).swipe(new Function() {
    @Override
    public void invoke($ droidQuery, Object... params) {
        if (params[0] == SwipeDetector.Direction.START)
            isSwiping = true;
        else if (params[0] == SwipeDetector.Direction.STOP) {
            if (isSwiping) {
                isSwiping = false;
                if (swipeDirection != null) {
                    switch(swipeDirection) {
                        case DOWN :
                            //TODO: Down swipe complete, so do something
                            break; 
                        case UP :
                            //TODO: Up swipe complete, so do something
                            break; 
                        case LEFT :
                            //TODO: Left swipe complete, so do something
                            break; 
                        case RIGHT :
                            //TODO: Right swipe complete, so do something (such as):
                            day++;
                            Fragment1 rightFragment = new Fragment1();
                            Bundle args = new Bundle();
                            args.putInt("day", day);
                            rightFragment.setArguments(args);

                            android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                            transaction.replace(R.id.fragment_container, rightFragment);
                            transaction.addToBackStack(null);
                            transaction.commit();
                            break; 
                        default :
                            break; 
                    }
                }
            }
        }
        else {
            swipeDirection = (SwipeDetector.Direction) params[0];
        }
    }
});
于 2013-08-22T14:45:02.950 に答える