Android 單雙擊實現的方法步驟
阿新 • • 發佈:2020-01-14
記錄單擊、雙擊實現過程,進行簡單的封裝,便於複用,包括常用的軟體雙擊退出。
雙擊實現:記錄第一次點選時間,在設定時間內再次點選,則返回監聽事件,否則不做處理;Application雙擊退出亦是同樣的實現邏輯。
/** * 雙擊實現 * * @author 幾圈年輪 */ public abstract class BaseDoubleClickListener implements View.OnClickListener { private static final long DOUBLE_TIME = 500; private static long lastClickTime = 0; @Override public void onClick(View v) { long currentTimeMillis = System.currentTimeMillis(); if (currentTimeMillis - lastClickTime < DOUBLE_TIME) { onDoubleClick(v); } lastClickTime = currentTimeMillis; } /** * 雙擊事件 * * @param v 檢視 */ public abstract void onDoubleClick(View v); }
呼叫方式:
view.setOnClickListener(new BaseDoubleClickListener() { @Override public void onDoubleClick(View v) { } });
Application雙擊退出:
private long onBackPressedTime; @Override public void onBackPressed() { long timeSpan = System.currentTimeMillis() - onBackPressedTime; onBackPressedTime = System.currentTimeMillis(); if (timeSpan > 2000) { Toast.makeText(this,getResources().getString(R.string.exit),Toast.LENGTH_SHORT).show(); } else { super.onBackPressed(); } }
單擊及雙擊實現:使用Handler進行延時訊息傳送,通過計數獲取點選次數,若設定時間內點選兩次則返回雙擊事件;單次,則返回單擊事件。
/** * 單擊、雙擊實現 * * @author 幾圈年輪 */ public abstract class BaseClickListener implements View.OnClickListener { private static final int TIMEOUT = 400; private int clickCount = 0; private Handler handler; protected BaseClickListener() { handler = new Handler(); } @Override public void onClick(View v) { clickCount++; handler.postDelayed(new Runnable() { @Override public void run() { if (clickCount == 1) { onSingleClick(v); } else if (clickCount == 2) { onDoubleClick(v); } handler.removeCallbacksAndMessages(null); clickCount = 0; } },TIMEOUT); } /** * 單擊實現 * * @param v 檢視 */ public abstract void onSingleClick(View v); /** * 雙擊實現 * * @param v 檢視 */ public abstract void onDoubleClick(View v); }
呼叫方式:
view.setOnClickListener(new BaseClickListener() { @Override public void onSingleClick(View v) { } @Override public void onDoubleClick(View v) { } });
主要重寫了View的OnClickListener事件,也可以重寫OnTouchListener進行處理;採用抽象類抽象方法,也可使用介面封裝進行處理。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。