Saya ingin aplikasi saya mengenali ketika pengguna menggesek dari kanan ke kiri pada layar ponsel.
Bagaimana cara melakukannya?
android
swipe
gesture-recognition
endryha
sumber
sumber
Jawaban:
OnSwipeTouchListener.java :
Pemakaian:
sumber
OnSwipeTouchListener
yang menerima konteks karena konstruktorGestureDetector
itu sudah tidak digunakan lagi sejak API level 3, dan instantiateGestureDetector
di konstruktor itu.onTouch
keOnSwipeTouchListener
definisi, jika tidak IDE saya akan muncul kesalahan "mengakses anggota pribadi"Kode ini mendeteksi gesekan ke kiri dan kanan, menghindari panggilan API yang tidak digunakan, dan memiliki peningkatan lain-lain atas jawaban sebelumnya.
Gunakan seperti ini:
sumber
setOnTouchListener
(biasanya dionCreate
).context
adalahthis
penunjuk (kecuali jika Anda membuat fragmen).Fragment.getActivity()
.Jika Anda juga perlu memproses acara klik di sini beberapa modifikasi:
Dan penggunaan sampel:
sumber
Memperluas jawaban Mirek, untuk kasus ketika Anda ingin menggunakan gerakan gesek di dalam tampilan gulir. Secara default pendengar sentuh untuk tampilan gulir dinonaktifkan dan karenanya tindakan gulir tidak terjadi. Untuk memperbaikinya, Anda perlu mengganti
dispatchTouchEvent
metodeActivity
dan mengembalikan versi yang diwariskan dari metode ini setelah Anda selesai dengan pendengar Anda sendiri.Untuk melakukan beberapa modifikasi pada kode Mirek: Saya menambahkan pengambil untuk
gestureDetector
diOnSwipeTouchListener
.Deklarasikan bagian
OnSwipeTouchListener
dalam Kegiatan sebagai bidang kelas-lebar.Ubah kode penggunaan sesuai:
Dan timpa
dispatchTouchEvent
metode di dalamActivity
:Sekarang kedua tindakan gulir dan geser harus bekerja.
sumber
Dalam rangka untuk memiliki
Click Listener
,DoubleClick Listener
,OnLongPress Listener
,Swipe Left
,Swipe Right
,Swipe Up
,Swipe Down
di tunggalView
Anda perlusetOnTouchListener
. yaitu,Untuk ini, Anda perlu
OnSwipeTouchListener
kelas yang mengimplementasikanOnTouchListener
.sumber
Anda tidak perlu perhitungan yang rumit. Itu bisa dilakukan hanya dengan menggunakan
OnGestureListener
antarmuka dariGestureDetector
kelas.onFling
Metode di dalam Anda dapat mendeteksi keempat arah seperti ini:MyGestureListener.java
:pemakaian:
sumber
velocityX
danvelocityY
dalamonFling
metode. Meskipun Anda dapat bereksperimen untuk melihat nilai mana yang paling sesuai dengan kebutuhan Anda, tetapi angka terakhir akan bersifat universal.Gunakan SwipeListView dan biarkan ia menangani deteksi gerakan untuk Anda.
sumber
Versi Kotlin dari @Mirek Rusin ada di sini:
OnSwipeTouchListener.kt:
Pemakaian:
yang
open
kata kunci adalah titik bagi saya ...sumber
Untuk menambahkan onClick juga, inilah yang saya lakukan.
Saya menggunakan Fragmen, jadi gunakan getActivity () untuk konteks. Beginilah cara saya mengimplementasikannya - dan itu berhasil.
sumber
Metode @Edward Brey bekerja dengan sangat baik. Jika seseorang juga ingin menyalin & menempelkan impor untuk
OnSwipeTouchListener
, ini dia:sumber
Sedikit modifikasi dari jawaban @Mirek Rusin dan sekarang Anda dapat mendeteksi gesekan multitouch. Kode ini ada di Kotlin:
Di mana Gesture.SWIPE_RIGHT dan lainnya adalah indentificator integer unik dari gesture yang saya gunakan untuk mendeteksi jenis gesture nanti dalam aktivitas saya:
Jadi Anda lihat gesture di sini adalah variabel integer yang menyimpan nilai yang telah saya lewati sebelumnya.
sumber
Solusi saya mirip dengan yang di atas, tetapi saya telah mengabstraksikan penanganan isyarat menjadi kelas abstrak
OnGestureRegisterListener.java
, yang mencakup isyarat gesek , klik , dan klik panjang .OnGestureRegisterListener.java
Dan gunakan seperti itu. Perhatikan bahwa Anda juga dapat dengan mudah mengirimkan
View
parameter Anda .sumber
Saya sudah melakukan hal serupa, tetapi hanya untuk gesekan horizontal
Dan kemudian dapat digunakan untuk melihat komponen
sumber
Pertanyaan ini ditanyakan bertahun-tahun yang lalu. Sekarang, ada solusi yang lebih baik: SmartSwipe: https://github.com/luckybilly/SmartSwipe
kode terlihat seperti ini:
sumber
@Mirek Rusin answeir sangat bagus. Tapi, ada bug kecil, dan perbaikannya diperlukan -
Apa bedanya? Kami menetapkan result = true, hanya jika kami telah memeriksa bahwa semua persyaratan (baik SWIPE_THRESHOLD dan SWIPE_VELOCITY_THRESHOLD adalah OK). Ini penting jika kita membuang swipe jika beberapa persyaratan tidak tercapai, dan kita harus menggunakan metode onTouchEvent dari OnSwipeTouchListener!
sumber
Berikut adalah Kode Android sederhana untuk mendeteksi arah gerakan
Di
MainActivity.java
danactivity_main.xml
, tulis kode berikut:sumber
sumber
Jika Anda ingin menampilkan beberapa tombol dengan aksi saat item daftar digesek, banyak perpustakaan di internet yang memiliki perilaku ini. Saya mengimplementasikan perpustakaan yang saya temukan di internet dan saya sangat puas. Sangat mudah digunakan dan sangat cepat. Saya meningkatkan perpustakaan asli dan saya menambahkan pendengar klik baru untuk klik item. Saya juga menambahkan font awesome library ( http://fortawesome.github.io/Font-Awesome/ ) dan sekarang Anda bisa menambahkan judul item baru dan menentukan nama ikon dari font awesome.
Inilah tautan github
sumber
sumber
penggunaan jawaban Edward Brey di Kotlin
sumber