Функция Shake состоит в том, чтобы использовать датчик ускорения мобильного телефона, чтобы определить, находится ли он в состоянии встряхивания и выполнить соответствующие операции.
1. Поместите музыкальный файл в Res/RAW. Если нет RAW, создайте
2. Файлы макета
<? xml version = "1.0" Encoding = "UTF-8"?> <RELATIVELAYOUT XMLNS: ANDROID = "http://schemas.android.com/apk/res/android" xmlns: tools = "http://schemas.android.com/tools" android: id = "@+id/active_shake_shake. Android: layout_width = "match_parent" Android: layout_height = "match_parent" Инструменты: context = "com.sq.dissertation.activity.shakeactivity" Android: founal = "#1d1d1d"> <ImageView Android: layout_width = "wroud_content" Android: Layout_Height = "roud_content" roud_content "roud_content" Android: Layout_CenterinParent = "true" Android: src = "@mipmap/shakehideimg_man2"/> <linearlayout android: layout_width = "match_parent" Android: Layout_height = "match_parent" Android: Gravity = "center" Android: Oniodation = "vertical"> <ImageViod asdoid: "@handloid:"@wardsiod at@wardiod asdilo and wardiod: 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 = "raw_content" android: layout_height = "roud_sontent" Android: src = "@mipmap/shake_logo_down"/> </linearlayout> </relativeLayout>
3. код Java
Общедоступный класс ShakeActivity расширяет AppCompatactivity реализует SensoreVentListener {Private ImageView IVUP; Private ImageView ivdown; Частный Sensormanager Sensormanager; частный вибратор вибратора; частный датчик датчика; частный медиаплееров; частный объект -ананатор Упаниматор; частный объект -анаматор 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)); // получить SensorManager = ((SensorManager) getSystemservice (sensor_service)); // создание вибратора объекта мобильного телефона к Vibrator = ((Vibrator) getSystemservice (Vibrator_Service)); // Получить датчик датчика ускорения = SensorManager.getDefaultsensor (sensor.type_accelerometer); /*Созданный объект, параметры: максимальное количество потоков воспроизводится одновременно, то есть верхний предел количества музыки, воспроизводимой одновременно; Тип потоков обычно используется для использования audiomanager.stream_music для указания качества преобразования скорости отбора проб, которое можно повторить, но эта функция пока не может вступить в силу, рекомендуется использовать 0 */// Soundpool = New Soundpool (1, audiomanager.stream_music, 0); // Параметр третий не имеет эффекта, рекомендуется использовать 1 // loadid = soundpool.load (shakeactivity.this, r.raw.three, 1); Player = MediaPlayer.Create (this, r.raw.music); initanimation (); } private void initanimation () {// анимация верхних и нижних двух картин upanimator = objectAnimator.offloat (ivup, "translationy", 0, -200, 0); upanimator.setInterpolator (new AcceleratedEcelerateinterpolator ()); upanimator.setduration (2000); downanimator = objectAnimator.offloat (ivdown, "translationy", 0, 200, 0); Downanimator.setInterpolator (новый AcceleratedEcelerateInterpolator ()); Downanimator.SetDuration (2000); } @Override Protected void onResume () {super.onresume (); if (sensormanager! = null) {// Регистрация слушателя, монитор, датчик, получение частоты датчика Sensormanager.registerListener (это, датчик, Sensormanager.sensor_delay_normal); }} @Override Protected void OnPause () {super.onpause (); if (sensormanager! = null) {// Отмена слушателя sensormanager.unregisterlistener (это); // выпустить аудио -ресурс // soundpool.unload (loadid); }} @Override Protected void ondestroy () {super.ondestroy (); player.release (); } @Override public void onsensorChanged (sensorevent Event) {// Получить данные, когда изменяет информацию о датчике float [] values = event.values; // зерновое ускорение в направлении оси X, положительный float x = значения [0]; // гравитационное ускорение в направлении оси y является положительным float y = значения [1]; // гравитационное ускорение в направлении оси Z является положительным float z = значения [2]; // Общее тяжкое ускорение в этих трех направлениях достигает 40 и достигает состояния встряхивания телефона int value = 18; if (math.abs (x)> value || math.abs (y)> value || math.abs (z)> 19) {long patter [] = {200, 1000}; Vibrator.vibrate (паттер, 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 (датчик датчика, int actuach) {}}Дополнение: Soundpool появляется в коде Java для воспроизведения звуковых эффектов. Это подходит для игры в короткие звуковые эффекты. Это может применяться только для максимум 1 мм памяти. Некоторые файлы сами по себе не большие, но после декодирования они будут большими, поэтому, как правило, они не воспроизводятся с файлами песен.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.