onTouchEvent() を使用してジェスチャを検出することは、Android 開発では一般的な方法です。ただし、デフォルトの実装には、長押しを処理する簡単な方法が含まれていません。この質問では、onTouchEvent() を使用して長押しを検出する戦略を検討します。
応答では、これを達成するための 2 つの方法が提案されています。
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 中国語 Web サイトの他の関連記事を参照してください。