在BaseActivity中重写dispatchTouchEvent 代码如下:
float touchX =-1; //记录点击的坐标
float touchY =-1;
float poi = 40;//偏移量
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {//MotionEvent中还有很多参数,如 DOWN事件的开始时间,UP事件的结束时间等等
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
if (isFastClick()
&&(touchX != -1 && touchY != -1
&&ev.getX() <= touchX + poi && ev.getX() >= touchX - poi //点击位置判断 以点击点坐标为中心 设置范围
&&ev.getY() <= touchY + poi && ev.getY() >= touchY - poi)) {
return true;
}
touchX = ev.getX();
touchY = ev.getY();
}
return super.dispatchTouchEvent(ev);
}
private long lastClickTime;
private boolean isFastClick() {//点击间隔时间判断
long time = System.currentTimeMillis();
long timeD = time - lastClickTime;
if (timeD >= 0 && timeD <= 500) {//点击间隔时间
return true;
} else {
lastClickTime = time;
return false;
}
}
MotionEvent中还有很多参数,如 DOWN事件的开始时间,UP事件的结束时间等等,如果有错误或者更优的方法请留言。
网友评论