android防止重複點擊,記錄下

package com.hazens.kaolafm;

import java.util.ArrayList;
import java.util.List;

/**
 * 防止短時間內頻繁點擊。默認500毫秒,使用{@link #check(long, Object)}可以自定義時間。
 */

public class AntiShake {
    private static List<OneClick> mOneClickList = new ArrayList<>();

    private static long mDelayTime = 0;

    /**
     * 檢查是否在短時間內連續點擊
     * @param obj
     * @return true 是
     */
    public static boolean check(Object obj){
        String flag;
        if (obj == null){
            flag = Thread.currentThread().getStackTrace()[0].getMethodName();
        }else {
            flag = obj.toString();
        }
        for (OneClick oneClick : mOneClickList){
            if (oneClick.getMethodName().equals(flag)){
                return oneClick.check();
            }
        }
        OneClick oneClick = new OneClick(flag);
        if (mDelayTime > 0){
            oneClick.setClickDelayTime(mDelayTime);
        }
        mOneClickList.add(oneClick);
        return oneClick.check();
    }

    /**
     * 檢查是否在設定時間內連續點擊
     * @param delayTime 不在再次點擊的時間間隔
     * @param obj
     * @return
     */
    public static boolean check(long delayTime, Object obj){
        setClickDelayTime(delayTime);
        return check(obj);
    }
    public static void setClickDelayTime(long delayTime){
        mDelayTime = delayTime;
    }

    static class OneClick{

        private long clickDelayTime = 500L;

        private long lastTime;

        private final String methodName;

        public OneClick(final String methodName) {
            this.methodName = methodName;
        }

        /**
         * 當前時間與上一次時間間隔大於延遲返回false
         * @return
         */
        boolean check() {
            long currentTime = System.currentTimeMillis();
            if (currentTime - lastTime > clickDelayTime){
                lastTime = currentTime;
                return false;
            }
            return true;
        }

        String getMethodName() {
            return methodName;
        }
        void setClickDelayTime(long delayTime){
            clickDelayTime = delayTime;
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章