首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 按鈕按下與釋放事件監聽:實現長按計時器功能

     編輯:程式設計綜合問答

需求場景

需檢測按鈕的按下(ACTION_DOWN)與釋放(ACTION_UP)事件,按下時啟動計時器,釋放時停止,區別於普通點擊與長按事件。

核心實現:OnTouchListener

button.setOnTouchListener((v, event) -> {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            // 手指按下:啟動計時器
            chronometer.setBase(SystemClock.elapsedRealtime());
            chronometer.start();
            return true; // 消費事件,繼續接收後續事件
            
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            // 手指釋放或取消:停止計時器
            chronometer.stop();
            return true;
    }
    return false;
});

關鍵區別對比

事件類型觸發時機適用場景
OnClickListener按下並釋放完成普通點擊操作
OnLongClickListener長按達到閾值(默認 500ms)長按菜單、進入編輯模式
OnTouchListener按下、移動、釋放、取消全過程精確控制、拖拽、按住說話、計時器

進階應用:按住說話/錄音

recordButton.setOnTouchListener((v, event) -> {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            startRecording();
            v.setPressed(true); // 視覺反饋
            return true;
        case MotionEvent.ACTION_UP:
            stopRecording();
            v.setPressed(false);
            return true;
        case MotionEvent.ACTION_CANCEL:
            cancelRecording();
            v.setPressed(false);
            return true;
    }
    return false;
});

注意事項

  • 返回 true 表示消費事件,false 會中斷後續事件傳遞
  • 需處理 ACTION_CANCEL(如來電、彈窗打斷)
  • 視覺反饋可結合 Selector Drawable 實現按下狀態樣式

總結

OnTouchListener 提供精細的觸摸事件控制,是實現按住計時、錄音、拖拽等交互的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved