在doubleTap和Swipe之间切换

时间:2012-08-01 06:00:41

标签: android swipe gesturedetector

我有一个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。)禁用点击并仅允许滑动

2 个答案:

答案 0 :(得分: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 herehere进行滑动的示例,如果你对Google进行一些搜索,还有更多的例子。

答案 1 :(得分:2)

为了检测滑动(它们被称为 FLING EVENTS ),您必须实现android.view.GestureDetector.OnGestureListener接口。该接口提供的方法之一是onFling。这将检测滑动(您必须找到所需滑动事件的确切实现)。

关于点击和滑动之间的切换,您是否要使用某种按钮点击事件来执行此操作?假设您使用两个按钮(忽略语法错误),我可以修改您的代码。即使在你不使用两个按钮的情况下,你仍然只需要修改下面两个布尔值,无论你想要禁用攻丝和滑动(直到你点击两个中的一个,滑动和攻丝都不会开始工作按钮)

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;
}