android - 如何使同一个 ImageView 识别滑动和单击事件?

标签 android onclick ontouchlistener gesture-recognition ontouch

当 onclick、ontouch 监听器附加到同一个 ImageView 时,触摸优先于单击。

我想要一个 ImageView 对 2 个不同的移动使用react:滑动和单击。我该怎么做呢?现在,我这样做:

swipe_area.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    x1 = event.getRawX();
                    break;
                case MotionEvent.ACTION_UP:
                    x2 = event.getRawX();
                    if (x1 < x2) {
                        switch (pencil_counter) {
                            case 1:
                                zad.setBackgroundResource(R.drawable.page13_zad6);
                                pered.setBackgroundResource(R.drawable.page13_pered6);
                                pencil_counter = 6;
                                break;
                            case 2:
                                zad.setBackgroundResource(R.drawable.page13_zad1);
                                pered.setBackgroundResource(R.drawable.page13_pered1);
                                pencil_counter = 1;
                                break;

最佳答案

您可以通过 GestureDetector 过滤单击事件,如下所示:

private GestureDetectorCompat simpleGestureHandler = new GestureDetectorCompat(getContext(), new MySimpleGestureListener());

swipe_area.setOnTouchListener(new View.OnTouchListener()
{
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        if(simpleGestureHandler.onTouchEvent(event))
        {
           //if true then a single tap
        }
        else
        {
           //calculate swipe action
        }
    }
}

class MySimpleGestureListener extends GestureDetector.SimpleOnGestureListener
{
    public boolean onSingleTapUp(MotionEvent e)
    {
        //single tap returns true so we know to register it over a swipe
        return true;
    }

    @Override
    public void onLongPress(MotionEvent event)
    {

    }

    @Override
    public boolean onDown(MotionEvent event)
    {

        return false;
    }

    @Override
    public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY)
    {

        return false;
    }

    @Override
    public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY)
    {


        return false;
    }
}

关于android - 如何使同一个 ImageView 识别滑动和单击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31562164/

相关文章:

android - 如何延长2类?

javascript - 在两个叠加的非分层元素上调用点击事件

javascript - 如何将 2 个图标/图像合二为一?

Android 将触摸事件传递给 WebView 的内部内容

java - Android Studio - 图像展开按钮(并打破重量规则?)

安卓NDK : Your APP_BUILD_SCRIPT points to an unknown file:

android - 创建和加载 "savedInstanceState"时,为什么需要使用常量作为键?

android - 自定义 View 可点击区域重叠

android - 如何检测ScrollView是否正在滚动

Android:setOnClickListener 之后的 setOnTouchListener