ホームページ  >  記事  >  Java  >  Android で onTouchEvent() を使用して長押しを検出する方法は?

Android で onTouchEvent() を使用して長押しを検出する方法は?

DDD
DDDオリジナル
2024-10-31 12:11:01333ブラウズ

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

Android での onTouchEvent() による長押しの検出

onTouchEvent() を使用してジェスチャを検出することは、Android 開発では一般的な方法です。ただし、デフォルトの実装には、長押しを処理する簡単な方法が含まれていません。この質問では、onTouchEvent() を使用して長押しを検出する戦略を検討します。

応答では、これを達成するための 2 つの方法が提案されています。

アプローチ 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。