1

私は RelativeLayout を持っています。私は TouchListener を GestureDetector の使用に入れています。私はすでに行っており、ダブルタップを検出できますが、ビューにスワイプイベントを追加するにはどうすればよいですか?

private void myTapEvent(){
        RlContent.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
            }
        });

        gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onDoubleTap(MotionEvent e) {
                count++;
                doTaskHere();
                return true;
            }
            @Override
            public boolean onDown(MotionEvent e) {
                return true;
            }
        });
    }

スワイプ イベントを実装した後、a.)タップのみを許可してスワイプを無効にする方法 と、b.)タップを無効にしてスワイプのみを許可する方法を切り替えるにはどうすればよいですか。

4

2 に答える 2

2

スワイプ ( FLING EVENTSと呼ばれます) を検出するには、android.view.GestureDetector.OnGestureListener インターフェースを実装する必要があります。このインターフェースが提供するメソッドの 1 つが onFling です。これにより、スワイプが検出されます (必要なスワイプ イベントの正確な実装を見つける必要があります)。

タップとスワイプの切り替えについてですが、何かボタンのクリックイベントで行うのでしょうか?2 つのボタンを使用して実行していると仮定して、コードを変更させてください (構文エラーは無視してください)。2 つのボタンを使用しない場合でも、以下の 2 つのブール値を変更して、タップとスワイプを無効にすることができます (2 つのうちの 1 つをクリックするまで、スワイプとタップは機能しません)。ボタン)

boolean makeSwipe = false;
boolean makeTap =false;

//onCreate method{
makeTapButton.setOnClickListener(new android.view.OnClickListener{

@Override
public onClick(View arg0){
makeSwipe = false;
makeTap = true;
}
});

makeSwipeButton.setOnClickListener(new android.view.OnClickListener{

@Override
public onClick(View arg0){
makeSwipe = true;
makeTap = false;
}
});

private void myTapEvent(){
    RlContent.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
        }
    });

    gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onDoubleTap(MotionEvent e) {

            if(makeTap)
            {
            count++;
            doTaskHere();
            return true;
            }

            return false;
        }
        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }
    });
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
            if(makeSwipe)
            {
             // Do some stuff
             return true;
            }
    return false;
}
于 2012-08-01T06:31:27.537 に答える
2

GestureDetectorリスナーにメソッドを追加しますonFling。さらに、それらを切り替えるには、boolean切り替え可能なクラス内の変数が必要になります。

private boolean mAllowSwipe = true; // True = swipe, no double-tap; false = double-tap, no swipe

// ...

private void switchGestureMode() {
    if (mAllowSwipe)
        mAllowSwipe = false;
    else
        mAllowSwipe = true;
}

// ...

private void myTapEvent(){
    // ...

    gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            if (mAllowSwipe) {
                return false;
            }
            count++;
            doTaskHere();
            return true;
        }
        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            if (!mAllowSwipe) {
                return false;
            }
            // Your logic here
        }
    });
}

// ...

fling を使用したスワイプの例がいくつかあります

于 2012-08-01T06:22:14.503 に答える