Gerak isyarat
Pengenalan bahagian ini:
Saya tidak mempunyai hari cuti pada hari Sabtu Saya baru balik dari potong rambut dan terus menulis~
Okey, ini bahagian akan membawakan anda sesuatu Ia adalah bahagian terakhir Bab 3 - Gerak isyarat, Rakan yang pernah menggunakan telefon bimbit Meizu mesti biasa dengan gerak isyarat Leret pada kedua-dua belah butang rumah seperti pada skrin. Anda boleh membuka senarai tugas latar belakang, dsb. Menggunakan gerak isyarat untuk beroperasi dalam aplikasi akan meningkatkan pengalaman pengguna dengan ketara. Contohnya, gerak isyarat Tatal boleh menatal skrin dalam penyemak imbas, Fling boleh menukar halaman dalam penyemak imbas, dsb.!
Sudah tentu, terdapat kelebihan dan kekurangan Contohnya, operasi gerak isyarat yang tidak sesuai boleh menyebabkan APP Carsh, yang sering menyebabkan ketidakpuasan hati pengguna. Jadi, jika anda ingin menambah gerak isyarat pada aplikasi anda, anda perlu berfikir dengan teliti! Selain itu, gerak isyarat harus dibezakan daripada sentuhan satu jari/berbilang jari yang dipelajari sebelum ini!
Gerak isyarat ialah: gelagat menyentuh berterusan, seperti meluncurkan skrin ke kiri dan kanan, atas dan bawah, atau melukis beberapa rajah geometri yang tidak sekata! Android menyediakan sokongan untuk kedua-dua gelagat gerak isyarat di atas:
- Android menyediakan pengesanan gerak isyarat dan menyediakan pendengar yang sepadan untuk pengecaman gerak isyarat!
- Pembangun Android boleh menambah gerak isyarat sendiri dan menyediakan API yang sepadan untuk mengecam gerak isyarat pengguna!
Jika telefon anda ialah sistem Android asli Android 4.x, anda mungkin dapat melihat Google pada telefon atau tablet anda APP Pembina Gerak Isyarat disediakan, yang membolehkan pengguna melukis simbol tulisan tangan dengan cara yang serupa dengan grafiti, menjadikannya Sepadan dengan nama rentetan! Sudah tentu, tidak mengapa jika anda tidak mempunyai telefon mudah alih seperti itu. Kami mempunyai emulator Mari cuba buka sistem 4.0 sendiri. Anda akan tahu. Selain itu, kami boleh pergi ke mmtsdcardgestures untuk mendapatkan fail yang menyimpan gerak isyarat! Okey, sangat mengomel, mari kita ke intinya!
Sebenarnya, siarkan dokumen API rasmi dahulu: GestureDetector
1. Urutan pelaksanaan interaksi gerak isyarat dalam Android
- 1. . Jari Apabila skrin disentuh, acara MotionEvent dicetuskan!
- 2 Acara ini dipantau oleh OnTouchListener, dan objek MotionEvent boleh diperolehi dalam kaedah onTouch()nya!
- 3. Majukan objek MotionEvent ke OnGestureListener melalui GestureDetector
- 4.
Mari kita lihat untuk kegunaan ketiga-tiga kelas di atas: MotionEvent: Kelas ini digunakan untuk merangkum gerak isyarat, pen sentuh, bebola jejak, dsb. peristiwa. Ia merangkumi dua sifat penting X dan Y secara dalaman, yang digunakan untuk merekodkan koordinat paksi mendatar dan paksi menegak masing-masing. GestureDetector: Kenali pelbagai gerak isyarat. OnGestureListener: Ini ialah antara muka mendengar untuk interaksi gerak isyarat, yang menyediakan berbilang kaedah abstrak. Dan panggil kaedah yang sepadan mengikut hasil pengecaman gerak isyarat GestureDetector.
——Maklumat di atas diambil daripada: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1020/448.html
2.
Daripada 1 kita tahu bahawa kunci untuk memantau gerak isyarat ialah: GestureListener Dia memberikan kami kaedah panggil balik berikut:
- Tekan (onDown): Saat jari anda menyentuh skrin sentuh, ia adalah sentuhan.
- Membaling (onFling): Tindakan menggerakkan jari anda dengan pantas pada skrin sentuh dan melepaskannya.
- Tekan lama (onLongPress): Jari ditekan untuk satu tempoh masa dan tidak dilepaskan.
- Tatal (onScroll): Slaid jari pada skrin sentuh.
- Tekan dan tahan (onShowPress): Jari ditekan pada skrin sentuh, dan julat masanya berkuat kuasa apabila tekan ditekan, sebelum tekan lama.
- Angkat ke atas (onSingleTapUp): Saat jari meninggalkan skrin sentuh.
Setelah mengetahui kaedah berkaitan GestureListener, adalah sangat mudah untuk melaksanakan pengesanan gerak isyarat adalah seperti berikut:
- Langkah 1: Cipta objek GestureDetector dan cipta Ia adalah perlu untuk melaksanakan GestureListener dan masukkan
- Langkah 2: Kendalikan acara TouchEvent pada Aktiviti atau komponen khusus kepada GestureDetector untuk diproses! Mari tulis kod mudah untuk mengesahkan proses ini, iaitu, tulis semula kaedah yang sepadan:
Kodnya adalah seperti berikut:
MyGestureListener mgListener peribadi;
mDetector GestureDetector peribadi;
String statik akhir peribadi TAG = "MyGesture";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Instantiate GestureListener dan GestureDetector mg objek baharu <🎜 ();
mDetector = GestureDetector baharu(ini, mgListener);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Kembalikan mDetector (.onTouchEvent acara);
}
//Sesuaikan GestureListener, ini di bawah kelas View, jangan tersilap! ! !
kelas persendirian MyGestureListener melaksanakan GestureDetector.OnGestureListener {
@Override
public boolean onDown(MotionEvent motionEvent) {
Log.d(TAG, "on Down: Tekan ");<🎜 return false;
}
");
}
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
Log.d(TAG, "onSingleTapUp : Saat jari meninggalkan skrin");
kembali palsu;
}
@Override
public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
Log.d(TAG, "onScroll: Slaid pada skrin sentuh");
return false se;
}
@Override
public void onLongPress(MotionEvent motionEvent) 🎜>
@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
Log.d(TAG, "onFling: Luncurkan dengan cepat dan lepaskan");
Kembalikan palsu;
Tangkapan skrin operasi yang sepadan:
1 Lepaskan serta-merta selepas menekan:
2 Tekan dan tahan dan lepaskan:
3. Leret perlahan-lahan dan lepaskan pada masa yang sama:
4. Tekan dan tahan Tahan hidup dan teruskan meluncur:
PS: Berdasarkan keputusan di atas, kami mendapati masalah: Apabila kami melaksanakan OnGestureListener, kami perlu melaksanakan semua gerak isyarat Mungkin saya hanya menyasarkan gelongsor, tetapi anda masih perlu membebankannya. Ini kelihatan sangat lucu, bukan? Pegawai itu pasti akan memberikan penyelesaian kepada kami. Hanya gantikan OnGestureListener di atas dengan SimpleOnGestureListener!
3. Contoh mudah: slaid ke bawah untuk menutup Aktiviti, slaid ke atas untuk memulakan Aktiviti baharu
Gunakan SimpleOnGestureListener yang dinyatakan di atas untuk melaksanakannya di sini:
Paparan operasi:
Kod pelaksanaan:
mDetector GestureDetector peribadi;
int statik akhir peribadi MIN_MOVE = 200; //Jarak minimum
MyGestureListener mg🎜>;
@Override
dilindungi void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Instantiation SimpleOnGestureDetector and GestureDetector > mgListener = MyGestureListener();
mDetector = GestureDetector baharu(ini, mgListener);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return mDetector onTouchEvent(event);
}
//Sesuaikan GestureListener, ini di bawah kelas View, jangan salah tulis! ! !
kelas persendirian MyGestureListener memanjangkan GestureDetector.SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float v, float v1) {
Y Jika() -1. e2.getY() > MIN_MOVE){
startActivity(new Intent(MainActivity.this, MainActivity.class));
Toast.makeText(MainActivity.this, "Mulakan Aktiviti melalui gerak isyarat", Toast.LENGTH _SHORT ) .show();
} else if(e1.getY() - e2.getY() < MIN_MOVE){
finish();
Toast.makeText(MainActivity.this ,"Tutup melalui gerak isyarat Aktiviti",Toast.LENGTH_SHORT).show();
}
pulangkan benar;
}
}
}
Analisis keputusan: Daripada perbandingan di atas, kita boleh tahu bahawa berbanding dengan SimpleOnGestureListener, gunakan SimpleOnGestureListener Nampaknya lebih mudah Anda boleh menulis semula apa sahaja kaedah yang anda mahukan. Cara lain untuk bermain, seperti mengezum gambar melalui gerak isyarat~
4 Penambahan dan pengecaman gerak isyarat:
Selain pengesanan gerak isyarat yang dijelaskan di atas, Android juga membenarkan kami. untuk menambah gerak isyarat , dan kemudian menyediakan API pengenalan yang berkaitan; GestureLibrary digunakan dalam Android untuk mewakili perpustakaan gerak isyarat, dan kelas alat GestureLibraries disediakan untuk mencipta perpustakaan gerak isyarat!
Empat kaedah statik untuk memuatkan perpustakaan gerak isyarat:
Selepas mendapatkan objek GestureLibraries, anda boleh menggunakan kaedah berikut yang disediakan oleh objek untuk melaksanakan operasi yang sepadan. :
Kaedah berkaitan:
- kekosongan awam addGesture (String entryName, Gesture gesture): Tambah gerak isyarat bernama entryName
- Set awam<String> getGestureEntries (): Dapatkan nama semua gerak isyarat dalam pustaka gerak isyarat
- ArrayList<Gerak isyarat>entri saya : Dapatkan semua gerak isyarat yang sepadan dengan nama entriName ArrayList<Prediction>
- kenali (Gerak isyarat): Kenali semua gerak isyarat yang sepadan daripada pustaka gerak isyarat semasa <🎜 removeEntry
- (String entryName): Padamkan gerak isyarat yang sepadan dengan entryName dalam pustaka gerak isyarat public void removeGesture
- (String entryName, Gesture gesture dalam): Padam entryName pustaka gerak isyarat Gerak isyarat yang sepadan dengan gerak isyaratboolean abstrak awam simpan
- (): Panggil kaedah ini selepas menambah gerak isyarat atau memadamkan gerak isyarat daripada pustaka gerak isyarat
Android menyediakan tiga antara muka pendengar untuk GestureOverlayView, seperti berikut, yang biasa digunakan ialah:
OnGesturePerformedListener>;<🎜 gerak isyarat selesai respons!5. Contoh penambahan gerak isyarat:
PS: Contoh merujuk kepada kod "Nota Kuliah Gila Android" Li Gang
Rendering berjalan:
Baiklah, berikut ialah kod pelaksanaan:
Dua fail reka letak: activity_main.xml dan dialog_save >aktiviti_utama.xml
xmlns:tools="http://schemas.android.com/tools" < ;TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Sila lukis gerak isyarat pada skrin di bawah~"
android:textSize="20sp" / > ="@+id/gesture"
android:layout_width="match_parent" ; LinearLayout>
dialog_save.xml
<LinearLayout xmlns:android="http://schemas .android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
< &> ;LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"> > <🎜 android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
. <EditTeks
android:layout_width= "match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit_name"/>
< Paparan Imej< ;<🎜 <🎜 🎜> android:id="@+id/img_show"
android:layout_width="128dp"
android </LinearLayout>
MainActivity.java:
peribadi EditText editText;
peribadi GestureOverlayView isyarat isyarat;<🎜 >< 🎜 < onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取手势编辑组件后,名后,🎜> . isyarat = (GestureOverlayView) findViewById(R.id.gesture) ;
gesture.setGestureColor(Color.GREEN);
gesture.setGestureStrokeWidth(5);
gesture.addOnGesturePerformedListener(OnGesturePerformedListener(OnGesturePerformedListener)(OnGesturePerformedListener(OnGesturePerformedListener)
public void onGesturePerformed(GestureOverlayView gestureOverlayView, final Gerak isyarat ) {
Lihat ById(R.id.img_show);
edittext akhir edit_name = (EditText) savedialog.findViewById (r.id.edit_name);
bitmap bitmap = gesture.tobitmap (128,128,10,0xffff0000); > baharu AlertDialog.Builder(MainActivity.this).setView(saveDialog)
.setPositiveButton("保存 <", . {
@Override
public void onClick(DialogInterface dialog Interface, int i) {
应的手势库
GestureLibrary gestureLib = GestureLibraries.fromFile("/mnt/sdcard/mygestures">);<🎜 gestureLib.addGesture(edit_name.getText().toString(),gesture);
gestureLib.save();
}).setNegativeButton("取消", null).show();
}
});
}
}
Akhir sekali, anda perlu menambahkan kebenaran untuk menulis pada kad SD dalam AndroidManifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
6 Contoh pengecaman isyarat
Kod pelaksanaan:
.gerak isyarat GestureOverlayView peribadi;
gerak isyarat GestureLibrary peribadiLibrary;
mContext Konteks peribadi;
id @Override pada masa yang sama (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
gestureLibrary = GestureLibraries.trom/File("card mygestures");
if (gestureLibrary.load()) {
Toast.makeText(mContext, "Pustaka Gerak isyarat berjaya dimuatkan", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "Pemuatan pustaka gerak isyarat gagal", Toast.LENGTH_SHORT).show();
}
}
//Selepas mendapatkan komponen penyuntingan gerak isyarat, tetapkan parameter yang berkaitan
gerak isyarat = (GestureOverlayView ) findViewById(R.id.gesture);
gesture.setGestureColor(Color.GREEN);
gesture.setGestureStrokeWidth(5);
gesture.addOnGrestureOnGesture .OnGesturePerformedList ener() {
@ Override
public void onGesturePerformed(GestureOverlayView gestureOverlayView, isyarat Gerak Isyarat akhir) {
//Kenali gestur&<🎜; hanya dilukis oleh pengguna ramalan = gestureLibrary. kenali(gerak isyarat);
ArrayList<String> hasil = ArrayList<String>();
//Rentas semua objek Ramalan yang ditemui
untuk (Ramalan pred : ramalan) {
pred.skor); ArrayAdapter<Objek>(mContext,
android.R.layout.simple_dropdown_item_1line , Result.Toarray (.)> (dapter nu Alert (.)> (dapter null ; ll) .setpositiveButton ("OK", NULL ) .tunjukkan ();
} lain {
Roti bakar makeText(mContext,"Tidak dapat mencari gerak isyarat yang sepadan!",Toast.LENGTH_SHORT).show();
Jangan lupa tambah kebenaran untuk membaca kad SD dalam fail AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Ringkasan bahagian ini:
Baiklah, bahagian ini memperkenalkan gerak isyarat dalam Android dan menerangkan tiga kandungan: pertimbangan gerak isyarat, penambahan gerak isyarat dan pengecaman gerak isyarat. , kebanyakan contoh datang dari Nota Kuliah Gila Android Teacher Li Gang Jika anda berminat, anda boleh membaca buku ~ Terima kasih