Android-长按和按下时的手势检测器

问题描述 投票:0回答:2

我使用手势来捕获触摸事件,但当我长按时它会触发两个事件。 当我按住按钮时如何禁用 onDown 事件? 这是我的代码。

final GestureDetector gestureDetector = new GestureDetector(
                new GestureDetector.SimpleOnGestureListener() {
                    public void onLongPress(MotionEvent e) {
                        Toast.makeText(mContext,
                                "long" + position + counter++,
                                Toast.LENGTH_SHORT).show();
                    }

                    public boolean onDown(MotionEvent e) {
                        Toast.makeText(mContext,
                                "touch" + position + counter++,
                                Toast.LENGTH_SHORT).show();
                        return true;
                    }
                });
        category.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
            }
        });
android events gesture
2个回答
0
投票

您可能想使用

abstract boolean onSingleTapUp(MotionEvent e)
。 您正在使用的回调
public boolean onDown(MotionEvent e)
会在所有手势开始时触发(当手指触摸屏幕时)。 无论手势是单击、长按还是任何其他手势,都只能在手势结束时(松开手指时)才能检测到。


0
投票

正如 kotucz 所说,

onDown
在所有手势开始时被触发。使用
onSingleTapUp
代替
onDown
是一个可行的替代方案。

但是,如果您需要

MotionEvent
无法提供的
onSingleTapUp
信息,例如鼠标信息(例如
event.isButtonPressed(MotionEvent.BUTTON_PRIMARY)
),您仍然需要
onDown
来提供此类信息。在这种情况下,你应该实施

  • onDown
    处理额外信息并使用或不使用事件(即分别返回 true 或 false),具体取决于您的业务案例
  • onSingleTapUp
    适用于
    onDown
    尚未消耗事件的情况
  • onLongPress
    适用于
    onDown
    尚未消耗事件的情况
© www.soinside.com 2019 - 2024. All rights reserved.