日常開發中點擊控件經常被使用到,點擊從時間上分爲短按,長按,從次數上分爲一次或多次,常見的短按和長按,Android SDK已經自帶了,但是多次點擊,比如連續點了兩次的監聽倒是不多見,我有幸在日常工作中接觸到了這種奇葩需求,一個按鈕點了兩次才做操作,具體實現方式記錄下:
public class DoubleClickListener implements View.OnTouchListener {
private static int timeout=400;//雙擊間四百毫秒延時
private int clickCount = 0;//記錄連續點擊次數
private Handler handler;
private MyClickCallBack myClickCallBack;
public interface MyClickCallBack{
void oneClick();//點擊一次的回調
void doubleClick();//連續點擊兩次的回調
}
public DoubleClickListener(MyClickCallBack myClickCallBack) {
this.myClickCallBack = myClickCallBack;
handler = new Handler();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
clickCount++;
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (clickCount == 1) {
myClickCallBack.oneClick();
}else if(clickCount==2){
myClickCallBack.doubleClick();
}
handler.removeCallbacksAndMessages(null);
//清空handler延時,並防內存泄漏
clickCount = 0;//計數清零
}
},timeout);//延時timeout後執行run方法中的代碼
}
return false;//讓點擊事件繼續傳播,方便再給View添加其他事件監聽
}
}
調用方式也很簡單:
textView.setOnTouchListener(new DoubleClickListener(new DoubleClickListener.MyClickCallBack() {
@Override
public void oneClick() {
}
@Override
public void doubleClick() {
}
}));
甚至以後要更多按監聽也能比較好擴展實現!!