Heim >Java >javaLernprogramm >Wie erkennt man langes Drücken mit onTouchEvent() in Android?

Wie erkennt man langes Drücken mit onTouchEvent() in Android?

DDD
DDDOriginal
2024-10-31 12:11:01419Durchsuche

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

Langes Drücken mit onTouchEvent() in Android erkennen

Die Verwendung von onTouchEvent() zum Erkennen von Gesten ist eine gängige Praxis in der Android-Entwicklung. Die Standardimplementierung bietet jedoch keine einfache Möglichkeit, mit langen Drücken umzugehen. In dieser Frage werden Strategien zum Erkennen langer Druckvorgänge mithilfe von onTouchEvent() untersucht.

Die Antwort schlägt zwei Methoden vor, um dies zu erreichen:

Ansatz 1: GestureDetector

GestureDetector ist eine leistungsstarke Android-Klasse Speziell für die Gestenerkennung entwickelt. Es bietet eine benutzerfreundliche Schnittstelle zum Erkennen gängiger Gesten, einschließlich langes Drücken.

Um die Erkennung langer Drücken mit GestureDetector zu implementieren, überschreibt der folgende Code die Methode onTouchEvent() und registriert eine GestureDetector-Instanz:

<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>

Ansatz 2: Benutzerdefiniertes Runnable

Wenn GestureDetector nicht möglich ist, besteht ein alternativer Ansatz darin, ein ACTION_DOWN-Ereignis zu registrieren und ein Runnable zu verwenden, um zu prüfen, wie viel Zeit verstrichen ist, bevor ACTION_UP- oder ACTION_MOVE-Ereignisse auftreten. Wenn die verstrichene Zeit kürzer als die vordefinierte lange Druckdauer ist, wird ein langer Druck erkannt.

Der folgende Code veranschaulicht diesen Ansatz:

<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>

Durch die Verwendung einer dieser Methoden können Entwickler dies tun Erkennen Sie mithilfe der onTouchEvent()-Methode effektiv langes Drücken in ihren Android-Anwendungen.

Das obige ist der detaillierte Inhalt vonWie erkennt man langes Drücken mit onTouchEvent() in Android?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn