Android防连续暴力点击(dispatchTouchEven

2020-04-30  本文已影响0人  xiaoyao1920

在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事件的结束时间等等,如果有错误或者更优的方法请留言。

上一篇下一篇

猜你喜欢

热点阅读