1

我有一个 RelativeLayout 我正在使用 GestureDetector 将 TouchListener 放入其中。我已经完成并且可以检测到双击,但是如何在视图中添加滑动事件呢?

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

在您的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 滑动的示例,如果您稍微搜索一下 Google,还有更多示例。

于 2012-08-01T06:22:14.503 回答
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;
}
于 2012-08-01T06:31:27.537 回答