修訂說明
- 感謝評論各位給我的建議,剛接手博客,很多地方還是不足。
- 評論給出的監聽事件的寫法和soundpool和mediaplayer不一樣,這兩點,都會在這篇博客做出修正
- 我覺得到這裏交一個UI演示框架應該就夠了,後期會更新一下更深層次的,像底部欄、頂部欄涉及fragment這些,我做好了一個,但是還沒想好怎麼講
- 最後聲明這篇解決辦法是我的朋友兼部門同事邱同學給的…原參考鏈接mediaplayer用法
- 源碼完整博客源碼
區別給Button一個按鍵音和播放音頻
- soundpool: 是 Android 提供的一個API類,用來播放簡短的音頻,可以完成音頻的播放、暫停、恢復及停止等操作。也可以加載多個音頻資源,進行管理與播放,這樣時間會簡短。同時還具備調節左右聲道的音量值、語速、優先級以及播放的次數等等。可參考soundpool
- 如果按照我最開始的博客寫的app,你會發現,播放音效的時候只有幾秒,對的,所以我們錯了,hhh
- mediaplayer步驟
- 創建對象
- 找到音頻位置
- 準備狀態
- start
如何實現
- 佈局文件跟之前稍有不同,加了停止鍵
- 下面展示一些
內聯代碼片
。
<Button
android:id="@+id/btn_stop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="停止播放"
android:textColor="@color/colorBlack" />
- java文件
下面展示一些 內聯代碼片
。
package com.example.eva;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import com.example.eva.util.ToastUtil;
import java.util.HashMap;
public class ListenActivity extends AppCompatActivity implements View.OnClickListener {
private Button mBtnPlay;
private Button mBtnPause;
private Button mBtnStop;
private Button mBtnListenSubmit;
private MediaPlayer mPlayer = null;
private boolean isRelease = true; //判斷是否MediaPlayer是否釋放的標誌
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listen);
mBtnListenSubmit = findViewById(R.id.btn_listen_submit);
mBtnListenSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.showMsg(ListenActivity.this,"提交成功");
}
});
bindViews();
}
private void bindViews() {
mBtnPlay = findViewById(R.id.btn_play);
mBtnPause = findViewById(R.id.btn_pause);
mBtnStop = findViewById(R.id.btn_stop);
//這裏的監聽事件用了評論的一個辦法,如果我沒理解錯的話,就是這個亞子去寫
mBtnPlay.setOnClickListener(this);
mBtnPause.setOnClickListener(this);
mBtnStop.setOnClickListener(this);
}
public void onClick(View v){
switch (v.getId()){
case R.id.btn_play:
if(isRelease){
mPlayer = MediaPlayer.create(this,R.raw.listen);
isRelease = false;
}
mPlayer.start();//開始播放
mBtnPlay.setEnabled(false);
mBtnPause.setEnabled(true);
mBtnStop.setEnabled(true);
break;
case R.id.btn_pause:
mPlayer.pause();//暫停播放
mBtnPlay.setEnabled(true);
mBtnPause.setEnabled(false);
mBtnStop.setEnabled(false);
break;
case R.id.btn_stop:
//mPlayer.pause();
mPlayer.reset(); //重置MediaPlayer
mPlayer.release(); //釋放MediaPlayer
isRelease = true;
mBtnPlay.setEnabled(true);
mBtnPause.setEnabled(false);
mBtnStop.setEnabled(false);
break;
}
}
}
- 其中的監聽事件也是和以往有些不同,用了監聽接口