ฟังก์ชั่นการเขย่าคือการใช้เซ็นเซอร์เร่งความเร็วโทรศัพท์มือถือเพื่อตรวจสอบว่าอยู่ในสถานะ Shake และดำเนินการที่สอดคล้องกัน
1. ใส่ไฟล์เพลงภายใต้ RES/RAW หากไม่มีดิบให้สร้างไฟล์
2. ไฟล์เลย์เอาต์
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <relativelayout xmlns: Android = "http://schemas.android.com/apk/res/android" xmlns: tools = "http://schemas.andas.andar.com/toolid Android: layout_width = "match_parent" Android: layout_height = "match_parent" เครื่องมือ: context = "com.sq.dissertation.activity.shakeactivity" Android: background = "#1d1d1d"> Android: layout_centerinparent = "true" Android: src = "@mipmap/shakehideimg_man2"/> <linearlayout Android: layout_width = "match_parent" Android: layout_height = "match_parent" Android: Gravity = Android: id = "@+id/hand_up" Android: layout_width = "wrap_content" Android: layout_height = "wrap_content" Android: src = "@mipmap/shake_logo_up"/> Android: layout_height = "wrap_content" Android: src = "@mipmap/shake_logo_down"/> </linearlayout> </relativelayout>
3. รหัส Java
Shakeactivity ระดับสาธารณะขยาย AppCompatactivity ใช้ SensoreVentListener {ImageView ส่วนตัว iVup; ImageView ส่วนตัว ivdown; SensorManager ส่วนตัว SensorManager; เครื่องสั่นเครื่องสั่นส่วนตัว; เซ็นเซอร์เซ็นเซอร์ส่วนตัว ผู้เล่น MediaPlayer ส่วนตัว upomanimator วัตถุส่วนตัว วัตถุอนิเมเตอร์อนิเมเตอร์ส่วนตัว; @Override ป้องกันโมฆะ 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)); // รับ SensorManager = ((SensorManager) GetSystemService (Sensor_service)); // อินสแตนซ์ของวัตถุสั่นของโทรศัพท์มือถือไปยัง vibrator = ((vibrator) getSystemService (Vibrator_Service)); // รับเซ็นเซอร์เซ็นเซอร์เร่งความเร็ว = SensorManager.getDefaultSensor (Sensor.type_accelerometer); /*วัตถุอินสแตนซ์พารามิเตอร์: จำนวนสตรีมสูงสุดที่เล่นพร้อมกันนั่นคือขีด จำกัด สูงสุดของจำนวนเพลงที่เล่นพร้อมกัน ประเภทของสตรีมโดยทั่วไปใช้เพื่อใช้ Audiomanager.stream_music เพื่อระบุคุณภาพการแปลงอัตราการสุ่มตัวอย่างที่สามารถทำซ้ำได้ แต่ฟังก์ชั่นนี้ยังไม่ได้มีผลแนะนำให้ใช้ 0 */// soundpool = soundpool ใหม่ (1, audiomanager.stream_music, 0); // พารามิเตอร์สามไม่มีผลแนะนำให้ใช้ 1 // loadid = soundpool.load (shakeactivity.his, r.raw.three, 1); ผู้เล่น = mediaPlayer.create (นี่, r.raw.music); initamation (); } เป็นโมฆะส่วนตัวเริ่มต้น () {// ภาพเคลื่อนไหวของภาพบนและล่างสองภาพ upanimator = ObjectAnimator.offloat (ivup, "translationy", 0, -200, 0); upanimator.setInterpolator (ใหม่ accelerateDecelerateInterpolator ()); upanimator.setDuration (2000); Downanimator = ObjectAnimator.offloat (ivdown, "แปล", 0, 200, 0); downanimator.setInterpolator (ใหม่ accelerateDecelerateInterpolator ()); downanimator.setDuration (2000); } @Override void void onResume () {super.onresume (); if (sensorManager! = null) {// register listener, monitor, sensor, รับเซ็นเซอร์ความถี่เซ็นเซอร์ SensorManager.registerListener (นี่, เซ็นเซอร์, SensorManager.Sensor_delay_Normal); }} @Override Void Protected Onpause () {super.onpause (); if (sensorManager! = null) {// ยกเลิกผู้ฟัง SensorManager.unregisterListener (นี่); // ปล่อยทรัพยากรเสียง // soundpool.unload (loadid); }} @Override ป้องกันโมฆะ onDestroy () {super.ondestroy (); ผู้เล่น release (); } @Override โมฆะสาธารณะ onsensorChanged (เหตุการณ์ sensoreVent) {// รับข้อมูลเมื่อข้อมูลเซ็นเซอร์เปลี่ยนค่าลอย [] ค่า = event.values; // การเร่งความเร็วของเม็ดในทิศทางแกน x, ลอยบวกไปทางด้านขวา x = ค่า [0]; // การเร่งความเร็วของแรงโน้มถ่วงในทิศทางแกน y คือลอยบวก y = ค่า [1]; // การเร่งความเร็วของแรงโน้มถ่วงในทิศทางแกน z คือลอยบวก z = ค่า [2]; // การเร่งความเร็วแรงโน้มถ่วงทั่วไปในทั้งสามทิศทางถึง 40 และถึงสถานะของการเขย่าค่าโทรศัพท์ int = 18; if (math.abs (x)> value || math.abs (y)> value || math.abs (z)> 19) {long patter [] = {200, 1000}; vibrator.vibrate (patter, 1); upanimator.start (); downanimator.start (); / * 1f: ปริมาตรช่องซ้าย 1f: ช่องสัญญาณขวา 1: ลำดับความสำคัญของเสียงยิ่งมีค่าที่สูงขึ้นเท่าใดลำดับความสำคัญที่สูงขึ้น 0: จำนวนเวลาเล่นวนรอบ, 0 คือการเล่นหนึ่งครั้ง -1 คือลูปที่ไม่มีที่สิ้นสุด if (player.isplaying ()) {player.seekto (0); } else {player.start (); }}} @Override โมฆะสาธารณะ onaccuracyChanged (เซ็นเซอร์เซ็นเซอร์ความแม่นยำ int) {}}ภาคผนวก: SoundPool ปรากฏในรหัส Java เพื่อเล่นเอฟเฟกต์เสียง เหมาะสำหรับการเล่นเอฟเฟกต์เสียงสั้น มันสามารถใช้ได้กับพื้นที่หน่วยความจำสูงสุด 1 ม. เท่านั้น ไฟล์บางไฟล์ไม่ใหญ่ในตัวเอง แต่จะมีขนาดใหญ่หลังจากถอดรหัสดังนั้นโดยทั่วไปแล้วพวกเขาจะไม่ได้เล่นกับไฟล์เพลง
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น