Android中区分滑动和点击操作

问题:在Android应用中,如何区分用户的操作是点击操作还是滑动操作。

答:

当用户对应用内一个View控件操作时,我们在程序中对View进行绑定Touch事件的监听(android.view.View.OnTouchListener)后会发现。

用户手指的一次完整操作,一定会经过3个基本的事件,分别是:

android.view.MotionEvent#ACTION_DOWN//Down事件
android.view.MotionEvent#ACTION_MOVE//Move事件
android.view.MotionEvent#ACTION_UP//Up事件

可是,当用户手指离开屏幕的时候,我们如何来判断用户的操作意图呢,是点击还是滑动?

在这里我们可以通过对Move事件时间的长短和移动的距离来判断用户是点击还是滑动操作

下面走Demo:

private float DownX, DownY = 0;
private float moveX, moveY = 0;
private long currentMS, moveTime = 0;
......省略

mFloatView.setOnTouchListener(new View.OnTouchListener() {

            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        DownX = event.getX();
                        DownY = event.getY();
                        currentMS = System.currentTimeMillis();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        DownX = event.getX();
                        DownY = event.getY();
                        moveX += Math.abs(event.getRawX() - DownX);//x轴移动距离
                        moveY += Math.abs(event.getRawY() - DownY);//y轴移动距离

                        break;
                    case MotionEvent.ACTION_UP:
                        moveTime = System.currentTimeMillis() - currentMS;

                        //判断是滑动还是点击操作、判断是否继续传递信号
                        if (moveTime < 300 && moveX < 20 && moveY < 20) {//点击事件
                            return false;
                        } else {//滑动事件

                            return true;//返回true,表示不再执行后面的事件
                        }
                        moveX = moveY = 0;//归零
                    default:
                        break;
                }

                return false;
            }
        });

在此记录与总结,2021年 10月 05日 星期二 17:24:52 CST。

Guess you like

Origin blog.csdn.net/u014132947/article/details/120615943