MotionEvent-如何在点击时执行操作,而不是拖动

时间:2019-01-01 16:14:57

标签: android listview touch listitem motionevent

我一直在在线上和在StackOverflow上搜索如何在onTouchListener中执行操作(如果该事件是轻击而不是任何形式的动作),但是我无法找到答案,并且我尝试过的方法也不起作用。我有一个ListView Adapter,并且在getView方法中,我在onTouchListener上设置了listItem

我想做的是点击listItem时,我想显示一个Toast,但是如果事件是拖动(,例如用户滚动浏览列表),我不想显示Toast

下面是我尝试过的代码。 ( makeToast是用于创建Toast的函数,而events.getRelation()是我想在Toast中包含的字符串。):

listItem.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_HOVER_ENTER) {
            makeToast(events.getRelation());
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            //  makeToast(events.getRelation());
        } else if (event.getAction() == MotionEvent.ACTION_SCROLL) {
            //   makeToast(events.getRelation());
        } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
            // makeToast(events.getRelation());
        } else if (event.getAction() == MotionEvent.AXIS_SCROLL) {
            //   makeToast(events.getRelation());
        } else if (event.getAction() == MotionEvent.AXIS_VSCROLL) {
            //    makeToast(events.getRelation());
        } else {
            //makeToast(events.getRelation());
        }
        return false;
    }
});

我曾尝试在不同类型的makeToast下使用MotionEvents方法,但是由于根本没有生成Toast或它是在我滚动而不是点击时制作的。有人可以帮助我吗?我觉得这是一个简单的问题,但我一直找不到解决方法

2 个答案:

答案 0 :(得分:0)

根据我的理解,我认为您希望为整个活动设置Click监听器!
为此,请添加ViewTreeObserver

appendDocument()

来源:https://stackoverflow.com/a/18000128/9819031

答案 1 :(得分:0)

要检测android中的单击和双击,请使用以下方法

class GestureTap extends GestureDetector.SimpleOnGestureListener { @Override public boolean onDoubleTap(MotionEvent e) { Log.i("onDoubleTap :", "" + e.getAction()); return true; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { Log.i("onSingleTap :", "" + e.getAction()); return true; } }

并在onTouch侦听器中添加以下代码

@Override public boolean onTouchEvent(MotionEvent event) { new GestureDetector(this, new GestureTap()).onTouchEvent(event); return true; }