名称: 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();
}
此类可以统计你点击事件。