首頁 > Java > java教程 > 如何在 Android 中使用 onTouchEvent() 偵測長按?

如何在 Android 中使用 onTouchEvent() 偵測長按?

DDD
發布: 2024-10-31 12:11:01
原創
437 人瀏覽過

How to Detect Long Presses with onTouchEvent() in Android?

在 Android 中使用 onTouchEvent() 偵測長按

使用 onTouchEvent() 偵測手勢是 Android 開發中常見的做法。但是,預設實作不包括處理長按的直接方法。本問題探討了使用 onTouchEvent() 偵測長按的策略。

回應提出了兩種實現此目的的方法:

方法 1:GestureDetector

GestureDetector 是一個強大的 Android 類別專為手勢偵測而設計。它提供了一個易於使用的介面來識別常見手勢,包括長按。

要使用GestureDetector 實現長按檢測,下面的代碼重寫onTouchEvent() 方法並註冊一個GestureDetector 實例:

<code class="java">@Override
public boolean onTouchEvent(MotionEvent event) {
    // Register and check for long presses
    GestureDetector gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onLongPress(MotionEvent e) {
            // Perform long press action
            return true;
        }
    });
    gestureDetector.onTouchEvent(event);
    return super.onTouchEvent(event);
}</code>
登入後複製

方法2:自定義Runnable

如果GestureDetector 不可行,另一種方法是註冊ACTION_DOWN 事件並使用Runnable 來檢查ACTION_UP 或ACTION_MOVE 事件發生之前經過的時間。如果經過的時間小於預先定義的長按持續時間,則偵測到長按。

以下的程式碼示範了這個方法:

<code class="java">final Handler handler = new Handler();
Runnable mLongPressed = new Runnable() { 
    public void run() { 
        Log.i("", "Long press!");
    }   
};

@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView){
    if(event.getAction() == MotionEvent.ACTION_DOWN)
        handler.postDelayed(mLongPressed, ViewConfiguration.getLongPressTimeout());
    if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() == MotionEvent.ACTION_UP))
        handler.removeCallbacks(mLongPressed);
    return super.onTouchEvent(event, mapView);
}</code>
登入後複製

透過使用這些方法中的任何一種,開發人員可以使用onTouchEvent() 方法有效偵測Android 應用程式中的長按。

以上是如何在 Android 中使用 onTouchEvent() 偵測長按?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板