Fungsi shake adalah menggunakan sensor akselerasi ponsel untuk menentukan apakah itu dalam keadaan goyang dan melakukan operasi yang sesuai.
1. Letakkan file musik di bawah res/raw. Jika tidak ada mentah, buat a
2. File tata letak
<? Xml Version = "1.0" encoding = "utf-8"?> <relativelayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: tools = "http://schemas.android.com/tools" dan@"http://schemas.android.com/tools" dan@/@schemas.android.com/tools Android: layout_width = "match_parent" android: layout_height = "match_parent" alat: context = "com.sq.dissertation.activity.shakeActivity" android: latar belakang = "#1d1d"> <imageview android: tata letak_width = "wapbap_content" android: lapis: " Android: Layout_CenterInparent = "true" android: src = "@mipmap/shakehideimg_man2"/> <linearlayout android: layout_width = "match_parent" android: layout_height = "match_parent" android: gravitasi = "center" android = "vertikal =" vertikal = "vertikal"> imagoid: gravity (gravity = "center" android = "or orior =" vertikal = "vertikal =" vertikal "> imagoid: gravity: center" android = "vertion =" vertikal = "vertikal =" vertikal "@vertikal" vertige "vertikal" vertige "vertikal" vertion "vertikal" vertikal "vertikal" vertikal " Android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: src = "@mipmap/shake_logo_up"/> <imageview android: id = "@+id/hand_down" Android: Layout_width = "Wrap_content" Android: Android: Layout = Layout_width = "Wrap_content: Android: Android: Layout = Layout_width =" Wrap_content: Android: Android; Android: src = "@mipmap/shake_logo_down"/> </learearlayout> </relativelayout>
3. Kode Java
shakeactivity kelas publik memperluas appCompatactivity mengimplementasikan sensoreventListener {private imageview ivup; Private ImageView IVDown; SensorManager SensorManager Pribadi; vibrator vibrator pribadi; sensor sensor pribadi; Pemain Mediaplayer Pribadi; Upanimator Objectanimator Pribadi; Objectanimator pribadi downanimator; @Override Protected void onCreate (bundle savedInstanceState) {super.onCreate (saveDinstanceState); setContentView (r.layout.activity_shake); ivup = ((imageview) findViewById (r.id.hand_up)); ivdown = ((imageview) findViewById (r.id.hand_down)); // Dapatkan SensormAnager = ((SensorManager) GetSystemService (Sensor_Service)); // instantiate vibrator objek ponsel ke vibrator = ((vibrator) getSystemService (vibrator_service)); // Dapatkan sensor akselerasi sensor = SensormAnager.getDefaultSensor (Sensor.type_accelerometer); /*Objek Instantiated, Parameter: Jumlah maksimum aliran yang diputar secara bersamaan, yaitu, batas atas jumlah musik yang diputar secara bersamaan; Jenis aliran umumnya digunakan untuk menggunakan audioMer.stream_music untuk menunjukkan kualitas konversi laju pengambilan sampel yang dapat diulang, tetapi fungsi ini belum dapat berlaku, disarankan untuk menggunakan 0 */// soundpool = Soundpool baru (1, audioMerer.stream_music, 0); // Parameter tiga tidak berpengaruh, disarankan untuk menggunakan 1 // loadId = soundpool.load (shakeActivity.tipis, r.raw.TheRe, 1); player = mediaaplayer.create (ini, r.raw.music); initanimation (); } private void initanimation () {// Animasi dari dua gambar atas dan lebih rendah Upanimator = objectanimator.offloat (ivup, "translationy", 0, -200, 0); Upanimator.setInterpolator (AccelerateDecelerateInterpolator baru ()); Upanimator.setDuration (2000); downanimator = objectanimator.offloat (ivdown, "translationy", 0, 200, 0); downanimator.setInterpolator (AcceleratedEcelerateInterpolator baru ()); downanimator.setDuration (2000); } @Override Protected void onResume () {super.onResume (); if (sensorManager! = null) {// Daftarkan pendengar, monitor, sensor, dapatkan sensor frekuensi sensorManager.registerlistener (ini, sensor, sensorager.sensor_delay_normal); }} @Override Protected void onPause () {super.onPause (); if (sensorManager! = null) {// Batalkan listener sensorManager.unregisterListener (ini); // Rilis Audio Resource // Soundpool.unload (LoadID); }} @Override Protected void ondestroy () {super.ondestroy (); player.release (); } @Override public void oncensorchanged (SensorEvent Event) {// Dapatkan data saat informasi sensor mengubah float [] values = event.values; // percepatan butiran dalam arah sumbu x, mengambang positif ke kanan x = nilai [0]; // Akselerasi gravitasi dalam arah sumbu y adalah float y = nilai positif [1]; // percepatan gravitasi dalam arah sumbu-z adalah float z = nilai positif [2]; // percepatan gravitasi umum dalam tiga arah ini mencapai 40 dan mencapai keadaan mengguncang nilai int telepon = 18; if (math.abs (x)> value || math.abs (y)> nilai || math.abs (z)> 19) {long patter [] = {200, 1000}; vibrator.vibrate (Patter, 1); upanimator.start (); downanimator.start (); /* 1f: left channel volume 1f: right channel volume 1: audio priority, the higher the value, the higher the priority, 0: the number of loop playback times, 0 is playback once, -1 is infinite loop, other values are loop+1 times, 1f: playback rate, range 0.5-2.0 (1 is normal rate) */// soundPool.play(loadId, 1f, 1f, 1, 0, 1f); if (player.isplaying ()) {player.seekto (0); } else {player.start (); }}} @Override public void onAccuracyChanged (sensor sensor, int akurasi) {}}Suplemen: Soundpool muncul dalam kode Java untuk memainkan efek suara. Sangat cocok untuk memainkan efek suara pendek. Ini hanya dapat berlaku untuk ruang memori maksimal 1m. Beberapa file tidak besar dalam diri mereka sendiri, tetapi mereka akan besar setelah decoding, jadi umumnya, mereka tidak dimainkan dengan file lagu.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.