La fonction Shake consiste à utiliser le capteur d'accélération du téléphone mobile pour déterminer s'il est dans un état de shake et d'effectuer des opérations correspondantes.
1. Mettez le fichier musical sous Res / Raw. S'il n'y a pas de brut, créez un
2. Fichiers de mise en page
<? xml version = "1.0" encoding = "utf-8"?> <relativelayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: tool Android: Layout_Width = "Match_Parent" Android: Layout_Height = "Match_Parent" Tools: context = "com.sq.dissertation.activity.shaKeActivity" Android: background = "# 1d1d1d"> <ImageView Android: Layout_Width = "WINCE_CONTENT" Android: Sayout_Height = "wrap_Content" Android: Layout_CenteRenparent = "true" Android: src = "@ mipmap / shakehideimg_man2" /> <linearlayout Android: Layout_Width = "Match_parent" Android: Layout_Height = "Match_Parent" Android: Gravity = "Center" Android: orientation = "Vertical"> <ImageViT 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 = "WINCOPT_CONTENT" Android: Layout_Height = "wrap_Content" Android: src = "@ mipmap / shake_logo_down" /> </ linearlayout> </ relativelayout>
3. Code java
La classe publique ShakeActivity étend AppCompatActivity implémente SensoreventListener {private ImageView IVup; ImageView Private Ivdown; SensorManager privé SensorManager; vibrateur privé; capteur de capteur privé; Player MediaPlayer privé; Private ObjectAnimator Upanimator; ObjectAnimateur privé 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)); // Get SensorManager = ((SensorManager) GetSystemService (Sensor_Service)); // Instancier le vibrateur d'objet du téléphone mobile vers Vibrator = ((vibratrice) GetSystemService (vibrator_service)); // Obtenez le capteur du capteur d'accélération = sensorManager.getDefaultSensor (capteur.type_acceleromment); / * Objet instancié, paramètres: le nombre maximum de flux joués simultanément, c'est-à-dire la limite supérieure du nombre de musique jouée simultanément; Le type de flux est généralement utilisé pour utiliser audiomanager.stream_music pour indiquer la qualité de conversion d'échantillonnage qui peut être répétée, mais cette fonction ne peut pas encore prendre effet, il est recommandé d'utiliser 0 * /// Soundpool = new Soundpool (1, audiomanager.stream_music, 0); // Le paramètre trois n'a aucun effet, il est recommandé d'utiliser 1 // LoadId = Soundpool.load (ShakeActivity.Te, R.raw. trois, 1); le player = mediaPlayer.Create (this, r.raw.music); InitAnimation (); } private void initAnimation () {// Animation des deux images supérieures et inférieures upanimator = objectAranimator.offloat (ivup, "traductiony", 0, -200, 0); upanimator.setinterPolator (new accelerateDecelerateInterpolateur ()); upanimator.setDuration (2000); DownanImator = ObjectAnimator.offloat (ivdown, "traduction", 0, 200, 0); downanimator.setinterpolator (new accelerateDecelerateInterpolateur ()); DownAnimator.SetDuration (2000); } @Override Protected void onResume () {super.OnResume (); if (sensorManager! = null) {// Enregistrer l'écoute, moniteur, capteur, obtenir la fréquence du capteur sensorManager.RegisterListener (this, capteur, sensormanager.sensor_delay_ormal); }} @Override Protected void onpause () {super.onpause (); if (sensorManager! = null) {// Annuler l'écouteur sensorManager.unRegisterListener (this); // Release Audio Resource // Soundpool.unload (LoadID); }} @Override Protected void onDestroy () {super.ondestroy (); Player.release (); } @Override public void onSenSorChanged (événement sensorevent) {// Obtenir des données lorsque les informations du capteur changent de flotteur [] valeurs = event.values; // Accélération de grain dans la direction de l'axe x, flotteur positif vers les valeurs x = droite [0]; // L'accélération de la gravité dans la direction de l'axe y est des valeurs de flotteur positif y = [1]; // L'accélération de la gravité dans la direction de l'axe z est des valeurs de flotteur z = positif [2]; // L'accélération générale de la gravité dans ces trois directions atteint 40 et atteint l'état de secouer le téléphone Int valeur = 18; if (math.abs (x)> value || math.abs (y)> valeur || math.abs (z)> 19) {long patat [] = {200, 1000}; vibratrice.vibrate (Patter, 1); upanimator.start (); downanimator.start (); / * 1f: Volume de canal gauche 1f: canal droit Volume 1: Priorité audio, plus la valeur est élevée, plus la priorité est élevée, 0: Le nombre de temps de lecture de boucle, 0 est la lecture une fois, -1 est une boucle infinie, d'autres valeurs sont des boucles + 1 fois, 1F: Playback Rate, Range 0.5-2.0 (1 est le taux normal) * // Soundpool.Play (LoadId, 1f, 1f, 1, 1, 1f); if (play.isplaying ()) {player.seekto (0); } else {player.start (); }}} @Override public void onaccuracychanged (capteur de capteur, précision int) {}}Supplément: Soundpool apparaît dans Java Code pour jouer des effets sonores. Il convient pour jouer des effets sonores courts. Il ne peut demander qu'un maximum d'espace mémoire de 1 m. Certains fichiers ne sont pas grands en eux-mêmes, mais ils seront importants après le décodage, donc généralement, ils ne sont pas joués avec des fichiers de chansons.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.