使用 onTouchEvent() 偵測手勢是 Android 開發中常見的做法。但是,預設實作不包括處理長按的直接方法。本問題探討了使用 onTouchEvent() 偵測長按的策略。
回應提出了兩種實現此目的的方法:
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>
如果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中文網其他相關文章!