亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java仿微信搖一搖實現播放音樂

發布時間:2020-09-11 02:45:16 來源:腳本之家 閱讀:249 作者:ami_daqi 欄目:編程語言

搖一搖功能是使用手機加速度傳感器來判斷是否處于搖一搖狀態,從而進行相應的操作。

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/activity_shake"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.sq.dissertation.activity.ShakeActivity"
  android:background="#1d1d1d">
<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_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:orientation="vertical">
    <ImageView
      android:id="@+id/hand_up"
      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"/>
  </LinearLayout>
</RelativeLayout>

3、Java代碼

public class ShakeActivity extends AppCompatActivity implements SensorEventListener {

  private ImageView ivUp;
  private ImageView ivDown;
  private SensorManager sensorManager;
  private Vibrator vibrator;
  private Sensor sensor;
  private MediaPlayer player;
  private ObjectAnimator upAnimator;
  private ObjectAnimator 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));
    //獲取加速度傳感器
    sensor = 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(new AccelerateDecelerateInterpolator());
    downAnimator.setDuration(2000);
  }

  @Override
  protected void onResume() {
    super.onResume();
    if (sensorManager != null) {
    //注冊監聽器,監聽,傳感器,獲取傳感器的頻率
    sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

  }

  @Override
  protected void onPause() {
    super.onPause();
    if (sensorManager != null) {
      //取消監聽器
      sensorManager.unregisterListener(this);
      //釋放音頻資源
//    soundPool.unload(loadId);
    }
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    player.release();

  }

  @Override
  public void onSensorChanged(SensorEvent event) {
    //獲取傳感器信息改變時的數據
    float[] values = event.values;
    //x軸方向的重力加速度,向右為正
    float x = values[0];
    //y軸方向的重力加速度,向左為正
    float y = values[1];
    //z軸方向的重力加速度,向上為正
    float z = values[2];
    //一般在這三個方向的重力加速度達到40就達到了搖晃手機的狀態
    int value = 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為無限循環,其他值為loop+1次數
      1f:播放速率,范圍0.5-2.0(1為正常速率)
       */
//      soundPool.play(loadId, 1f, 1f, 1, 0, 1f);
      if (player.isPlaying()) {
        player.seekTo(0);
      }else{
        player.start();
      }
    }
  }

  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {

  }
}

補充:Java代碼中出現的SoundPool來播放音效,它適合播放短促的音效,它最多只能申請1M的內存空間,有些文件本身不大,但是解碼后會很大,所以一般不播放歌曲類的文件。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

远安县| 五台县| 大名县| 贡觉县| 常州市| 增城市| 正宁县| 石柱| 兴安县| 桂阳县| 福泉市| 遵义县| 湖北省| 濮阳县| 池州市| 元朗区| 鄱阳县| 两当县| 长兴县| 乌恰县| 白山市| 达孜县| 泗洪县| 砚山县| 安康市| 吉木萨尔县| 德惠市| 金溪县| 松滋市| 湖口县| 乐陵市| 三台县| 孝昌县| 邹城市| 德阳市| 湄潭县| 福海县| 丹寨县| 南召县| 高雄市| 慈利县|