La función de sacudir es usar el sensor de aceleración del teléfono móvil para determinar si está en un estado de sacudida y realizar las operaciones correspondientes.
1. Pon el archivo de música en Res/Raw. Si no hay RAW, cree un
2. Archivos de diseño
<? xml versión = "1.0" encoding = "utf-8"?> <relativeLayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: herramientas = "http://schemas.android.com/tools" android: id = "@+id/actividad_shake" Android: Layout_width = "Match_parent" Android: Layout_height = "Match_parent" Herramientas: context = "com.sq.dissertation.activity.shakeactivity" android: fondos = "#1d1d1d"> <ImageView android: Layout_width = "wrap_content" android: lecto_height = "wrep_content" Android: Layout_CenterInParent = "True" Android: src = "@mipmap/shakhehideImg_man2"/> <lineArLayout android: Layout_width = "Match_parent" Android: Layout_Height = "Match_Parent" Android: Gravity = "Center" Android: Orientación = "Vertical"> <ImageView: Id = " 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: layout_height = "wrap_content" Android: src = "@mipmap/shake_logo_down"/> </linealLayout> </relativeLayout>
3. Código Java
Shakeactivity de clase pública extiende AppCompatactivity implementa SensorEventListener {private ImageView ivup; Private ImageView ivdown; Sensormanager privado Sensormanager; vibrador privado vibrador; sensor de sensor privado; Reproductor de MediaPlayer privado; Objectanimator privado Upanimator; Objectanimator privado Downanimator; @Override protegido 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)); // get sensorManager = ((sensorManager) getSystemService (sensor_service)); // Instanciar el vibrador del objeto del teléfono móvil a vibrator = ((vibrador) getSystemService (vibrator_service)); // Obtener el sensor de aceleración sensor = sensorManager.getDefaultSensor (sensor.type_accelerometer); /*Objeto instanciado, parámetros: el número máximo de transmisiones reproducidas simultáneamente, es decir, el límite superior del número de música reproducida simultáneamente; El tipo de transmisiones generalmente se usa para usar audiomanerer.stream_music para indicar la calidad de conversión de la tasa de muestreo que se puede repetir, pero esta función aún no puede entrar en vigencia, se recomienda usar 0 */// Soundpool = nuevo SoundPool (1, Audiomanager.stream_Music, 0); // El parámetro tres no tiene efecto, se recomienda usar 1 // loadid = SoundPool.Load (ShakeActivity.THIS, R.Raw.Three, 1); Player = MediaPlayer.Create (this, R.Raw.Music); initanimation (); } private void initanimation () {// Animación de las dos imágenes superiores e inferiores upanimator = Objectanimator.offloat (ivup, "Tradationy", 0, -200, 0); Upanimator.setInterpolator (nuevo AccelerateCelerateInterpolator ()); Upanimator.SetDuration (2000); downanimator = Objectanimator.Offloat (ivdown, "Traductyy", 0, 200, 0); downanimator.setInterpolator (New AccelerateCelerateInterpolator ()); Downanimator.SetDuration (2000); } @Override protegido void onresume () {super.onresume (); if (sensorManager! = null) {// registrar el oyente, monitor, sensor, obtener la frecuencia del sensor sensorManager.registerListener (this, sensor, sensorManager.sensor_delay_normal); }} @Override protegido void onPause () {super.onpause (); if (sensorManager! = null) {// Cancelar el oyente sensorManager.unregisterListener (this); // Release el recurso de audio // SoundPool.unload (LoadID); }} @Override protegido void onDestrOY () {super.ondestroy (); Player.Release (); } @Override public void onSensorChanged (evento sensorEvent) {// Obtener datos cuando la información del sensor cambia flotación [] valores = event.values; // Aceleración de grano en la dirección del eje x, flotación positiva x = valores [0]; // La aceleración de la gravedad en la dirección del eje y es positivo flotante y = valores [1]; // La aceleración de la gravedad en la dirección del eje z es positivo flotador z = valores [2]; // La aceleración de gravedad general en estas tres direcciones alcanza 40 y alcanza el estado de agitar el teléfono int value = 18; if (math.abs (x)> valor || math.abs (y)> valor || math.abs (z)> 19) {long patter [] = {200, 1000}; vibrador.vibrate (Patt, 1); upanimator.start (); downanimator.start (); / * 1f: Volumen del canal izquierdo 1f: Volumen del canal derecho 1: Prioridad de audio, mayor es el valor, mayor será la prioridad, 0: el número de tiempos de reproducción de bucle, 0 es reproducción una vez, -1 es infinito bucle, otros valores son el bucle+1 veces, 1f: tasa de reproducción, rango 0.5-2.0 (1 es normal) * /// Soundpool.play (cargada, 1f, 1, 1, 1, 1f); if (jugador.splaying ()) {jugador.seekto (0); } else {Player.Start (); }}} @Override public void onaccuracyChanged (sensor sensor, intacracia int) {}}Suplemento: Soundpool aparece en el código Java para reproducir efectos de sonido. Es adecuado para reproducir efectos de sonido cortos. Solo puede solicitar un máximo de 1 m de espacio de memoria. Algunos archivos no son grandes en sí mismos, pero serán grandes después de la decodificación, por lo que en general, no se reproducen con archivos de canciones.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.