package com.dianchou.dcw.view.main.point;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
/**
* 創(chuàng)建者? ? yf
* 創(chuàng)建時(shí)間? 2018/8/28 17:12
* 描述 ? ? ? ${TODO}
*/
public class SingleDoubleClickListener implements View.OnTouchListener {
? ? //雙擊間四百毫秒延時(shí)
? ? private static int timeout = 400;
? ? //記錄連續(xù)點(diǎn)擊次數(shù)
? ? private int clickCount = 0;
? ? private Handler handler;
? ? private MyClickCallBack myClickCallBack;
? ? public interface MyClickCallBack {
? ? ? ? void oneClick();//點(diǎn)擊一次的回調(diào)
? ? ? ? void doubleClick();//連續(xù)點(diǎn)擊兩次的回調(diào)
? ? }
? ? public SingleDoubleClickListener(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延時(shí),并防內(nèi)存泄漏
? ? ? ? ? ? ? ? ? ? //計(jì)數(shù)清零
? ? ? ? ? ? ? ? ? ? clickCount = 0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //延時(shí)timeout后執(zhí)行run方法中的代碼
? ? ? ? ? ? }, timeout);
? ? ? ? }
? ? ? ? //讓點(diǎn)擊事件繼續(xù)傳播,方便再給View添加其他事件監(jiān)聽
? ? ? ? return true;
? ? }
}
使用舉例:
View button= findViewById(R.id.button);
view.setOnTouchListener(new MyClickListener
(new MyClickListener.MyClickCallBack() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void oneClick() {
? ? ? ? ? ? ? ? Toast.makeText(MainActivity.this, "單擊",
? ? ? ? ? ? ? ? Toast.LENGTH_SHORT).show();
? ? ? ? ? ? }
? ? ? ? ? ? @Override
? ? ? ? ? ? public void doubleClick() {
? ? ? ? ? ? ? ? Toast.makeText(MainActivity.this, "雙擊",
? ? ? ? ? ? ? ? Toast.LENGTH_SHORT).show();
? ? ? ? ? ? }
? ? ? ? }));