android 点击事件防抖 防止重复点击

第一种
继承OnClickListener

import android.view.View;
import android.view.View.OnClickListener;

public abstract class OnClickFastListener implements OnClickListener {
    private static long lastClickTime;
    private long DELAY_TIME = 1000;

    public abstract void onFastClick(View view);

    private boolean isFastDoubleClick() {
        long time = System.currentTimeMillis();
        long timeD = time - lastClickTime;
        if (0 < timeD && timeD < this.DELAY_TIME) {
            return true;
        }
        lastClickTime = time;
        return false;
    }

    public void onClick(View v) {
        if (!isFastDoubleClick()) {
            onFastClick(v);
        }
    }

    public OnClickFastListener setLastClickTime(long delay_time) {
        this.DELAY_TIME = delay_time;
        return this;
    }
}

第二种
点击时,动态的在点击控件上加上tag,存放时间戳

import android.support.annotation.IntRange;
import android.support.annotation.NonNull;
import android.view.View;

/**
 * @ProjectName: 
 * @Package: 
 * @ClassName: AntiShakeUtils
 * @Description: 防抖动点击
 * @Author: 
 * @CreateDate: 
 */

public class AntiShakeUtils {

    private final static long INTERNAL_TIME = 1000;

    /**
     * Whether this click event is invalid.
     *
     * @param target target view
     * @return true, invalid click event.
     * @see #isInvalidClick(View, long)
     */
    public static boolean isInvalidClick(@NonNull View target) {
        return isInvalidClick(target, INTERNAL_TIME);
    }

    /**
     * Whether this click event is invalid.
     *
     * @param target       target view
     * @param internalTime the internal time. The unit is millisecond.
     * @return true, invalid click event.
     */
    public static boolean isInvalidClick(@NonNull View target, @IntRange(from = 0) long internalTime) {
        long curTimeStamp = System.currentTimeMillis();
        long lastClickTimeStamp = 0;
        Object o = target.getTag(R.id.last_click_time);
        if (o == null){
            target.setTag(R.id.last_click_time, curTimeStamp);
            return false;
        }
        lastClickTimeStamp = (Long) o;
        boolean isInvalid = curTimeStamp - lastClickTimeStamp < internalTime;
        if (!isInvalid)
            target.setTag(R.id.last_click_time, curTimeStamp);
        return isInvalid;
    }
}

使用

mButton.setOnClickListener(view -> {
        if (AntiShakeUtils.isInvalidClick(view)) return;
        //TODO 
});

你可能感兴趣的:(android 点击事件防抖 防止重复点击)