A função Shake é usar o sensor de aceleração do telefone celular para determinar se está em um estado de shake e executar operações correspondentes.
1. Coloque o arquivo de música em Res/Raw. Se não houver cru, crie um
2. Arquivos de layout
<? xml versão = "1.0" coding = "utf-8"?> <RelativeLayout xmlns: Android = "http://schemas.android.com/apk/res/android" xmlns: ferramentas = "http://schemas.android.com/ool/ont.ools"/iDTTP://SCHEMAM.Arid.ool.ool.ools "e" Android: layout_width = "match_parent" Android: layout_height = "match_parent" ferramentas: context = "com.sq.disSertation.activity.shakeActivity" Android: Background = "#1d1d1d"> <imagem Android: Layout_width = "WRAP_CONTENCINT" Android: layout_centerinparent = "true" Android: src = "@mipmap/shakehideimg_man2"/> <linearlayout Android: layout_width = "match_parent" Android: layout_height = "match_parent" Android: gravidade = "Centro" Android: Android: Android: Android: " Android: id = "@+id/hand_up" Android: layout_width = "wrap_content" Android: layout_height = "wrap_content" Android: src = "@mipmap/shake_logo_up"/> ImageView Android: id = ""+/handrowdo Android: layout_height = "wrap_content" Android: src = "@mipmap/shake_logo_down"/> </linearlayout> </lativeLayout>
3. Código Java
A classe pública Shakeacativity estende o appCompatactivity implementa SensoreEventListener {private ImageView IVUP; Private ImageView IVdown; Sensormanager privado Sensormanager; vibrador vibrador privado; sensor de sensor privado; jogador de mídia privado; Objectanimator privado upanimator; Objectanimator privado Downanimator; @Override Protected void onCreate (pacote savedInstancestate) {super.oCreate (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)); // instanciam o vibrador de objeto do telefone celular para vibrador = ((vibrador) getSystemService (vibrador_service)); // obtenha o sensor de sensor de aceleração = sensorManager.getDefaultSensor (sensor.type_acceleromômetro); /*Objeto instanciado, parâmetros: o número máximo de fluxos tocados simultaneamente, ou seja, o limite superior do número de música tocada simultaneamente; O tipo de fluxos é geralmente usado para usar o Audiomanager.Stream_Music para indicar a qualidade da conversão da taxa de amostragem que pode ser repetida, mas essa função ainda não pode entrar em vigor, recomenda -se usar 0 */// Soundpool = new Soundpool (1, Audiomanager.stream_music, 0); // O parâmetro três não tem efeito, é recomendável usar 1 // loadId = Soundpool.load (shakeActivity.This, R.raw.three, 1); player = MediaPlayer.create (this, r.raw.music); initanimation (); } private void initanimation () {// Animação da parte superior e inferior duas imagens upanimator = objectanimator.offloat (IVup, "tradução", 0, -200, 0); upanimator.setInterpolator (novo aceleradoCelerateInterpolator ()); upanimator.setDuration (2000); Downanimator = objectanimator.Offloat (IVdown, "Tradução", 0, 200, 0); Downanimator.setInterpolator (novo aceleradoCelerateInterpolator ()); Downanimator.SetDuration (2000); } @Override Protected void onResume () {super.onResume (); if (Sensormanager! = NULL) {// Registre o ouvinte, monitor, sensor, obtenha a frequência do sensor Sensormanager.registerListener (this, sensor, sensormanager.sensor_delay_normal); }} @Override Protected void onPause () {super.onpause (); if (sensormanager! = null) {// cancele o ouvinte sensormanager.unregisterListener (this); // Libere o recurso de áudio // soundpool.unload (loadId); }} @Override Protected void OnDestroy () {super.ondestroy (); player.release (); } @Override public void onsensorChanged (evento sensorevent) {// obtenha dados quando as informações do sensor alterações float [] valores = event.values; // aceleração de granulação na direção do eixo x, flutuação positiva x = valores [0]; // A aceleração da gravidade na direção do eixo y é positiva de flutuação y = valores [1]; // A aceleração da gravidade na direção do eixo z é positiva de flutuação z = valores [2]; // A aceleração geral da gravidade nessas três direções atinge 40 e atinge o estado de sacudir o telefone Int Value = 18; if (math.abs (x)> valor || math.abs (y)> valor || math.abs (z)> 19) {long tatter [] = {200, 1000}; vibrator.vibrate (Patter, 1); upanimator.start (); Downanimator.start (); / * 1f: Volume do canal esquerdo 1F: Volume do canal direito 1: prioridade de áudio, quanto maior o valor, maior a prioridade, 0: o número de tempos de reprodução de loop, 0 é de reprodução uma vez, -1 é infinito loop, outros valores é 1 1, 1 vezes, 1f: 1f: taxa de reprodução, Range 0,5-2,0 (1 ia normand). if (player.isplaying ()) {player.seekto (0); } else {player.start (); }}} @Override public void onaccuracyChanged (sensor de sensor, int precisão) {}}Suplemento: o Soundpool aparece no código Java para reproduzir efeitos sonoros. É adequado para reproduzir efeitos sonoros curtos. Ele só pode solicitar um espaço de memória no máximo 1M. Alguns arquivos não são grandes em si mesmos, mas serão grandes após a decodificação; portanto, geralmente, eles não são tocados com arquivos de músicas.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.