自定義可統計、防止快速點擊的button

@自定義可統計、防止快速點擊的button

名稱: MonitorFuncCButton (可統計的button)

最近遇見了一個需求,要求我快速點擊button時,只響應一次事件,後面的點擊均無效,並且還可以統計到你點擊的button的具體位置。

/**
 * Created by cz123 on 2018/11/8.
 */

public class MonitorFuncCButton extends Button {
    private int monitor_id = 0;   //button -- 位置身份標識
    private String monitor_name;   //MonitorFuncCButton -- 自身身份命名
    public final int KEY_ID= 525;  //設置monitorId
    public int times;

    public MonitorFuncCButton(Context context) {
        super(context,null);
    }

    public MonitorFuncCButton(Context context, AttributeSet attrs) {
        super(context, attrs,0);
    }

    public MonitorFuncCButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        initId();
    }

    private void initId() {
        if(getId() >0){
            monitor_id = getId();
        }else if (getTag(KEY_ID)!=null){
            if(getTag(KEY_ID) instanceof Integer){
                monitor_id = (int) getTag(KEY_ID);
            }
        }
    }

    public void setMonitor_id(int monitor_id){
        this.monitor_id = monitor_id;
    }

    public void setMonitor_name(String monitor_name){
        this.monitor_name = monitor_name;
    }



    /**
     *  點擊統計
     */
    public void clickStatistics() {
        times++;
        Toast.makeText(getContext(),"點擊次數:"+times,Toast.LENGTH_SHORT).show();
    }

	
}

在clickStatistics的函數中,是負責你button點擊的統計,可以將button傳遞到後臺,以此統計你的點擊位置。

/**
 * Created by cz123 on 2018/11/8.
 */

public abstract class OnFastClickListener implements View.OnClickListener {
    private long last_time = 0;
    private long limit_time = 2000L;
    @Override
    public void onClick(View v) {
        long time = System.currentTimeMillis();
        if(time-last_time>limit_time){
            onFastClick(v);
            if(v instanceof MonitorFuncCButton){
                ((MonitorFuncCButton)v).clickStatistics();
            }
            last_time = time;
        }

    }
    public abstract void  onFastClick(View v);
}

此類可以設置點擊最小間隔時間,實現onFastClick(View v),處理你的點擊事件,並且每次點擊會自動統計。

public  abstract  class OnMonitorClickListener implements View.OnClickListener {

    @Override
    public void onClick(View v) {
        if(v instanceof MonitorFuncCButton){
            ((MonitorFuncCButton)v).clickStatistics();
        }
        onMonitorClick();
    }

    /**
     * 可統計的點擊方法
     */
    public abstract void onMonitorClick();
}

此類可以統計你點擊事件。

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