Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengesan Tekan Lama dengan onTouchEvent() dalam Android?

Bagaimana untuk Mengesan Tekan Lama dengan onTouchEvent() dalam Android?

DDD
DDDasal
2024-10-31 12:11:01333semak imbas

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

Mengesan Tekan Lama dengan onTouchEvent() dalam Android

Menggunakan onTouchEvent() untuk mengesan gerak isyarat ialah amalan biasa dalam pembangunan Android. Walau bagaimanapun, pelaksanaan lalai tidak termasuk cara mudah untuk mengendalikan tekanan lama. Soalan ini meneroka strategi untuk mengesan tekanan lama menggunakan onTouchEvent().

Respons mencadangkan dua kaedah untuk mencapai ini:

Pendekatan 1: GestureDetector

GestureDetector ialah kelas Android yang berkuasa direka khusus untuk pengesanan gerak isyarat. Ia menyediakan antara muka yang mudah digunakan untuk mengecam gerak isyarat biasa, termasuk menekan lama.

Untuk melaksanakan pengesanan tekan lama dengan GestureDetector, kod di bawah mengatasi kaedah onTouchEvent() dan mendaftarkan contoh 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>

Pendekatan 2: Boleh Lari Tersuai

Jika GestureDetector tidak boleh dilaksanakan, pendekatan alternatif melibatkan mendaftarkan acara ACTION_DOWN dan menggunakan Boleh Lari untuk menyemak masa berlalu sebelum peristiwa ACTION_UP atau ACTION_MOVE berlaku. Jika masa berlalu kurang daripada tempoh tekan lama yang dipratentukan, tekan lama dikesan.

Kod di bawah menunjukkan pendekatan ini:

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

Dengan menggunakan salah satu kaedah ini, pembangun boleh berkesan mengesan tekanan lama dalam aplikasi Android mereka menggunakan kaedah onTouchEvent().

Atas ialah kandungan terperinci Bagaimana untuk Mengesan Tekan Lama dengan onTouchEvent() dalam Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn