问题:在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。