Media Player 音樂播放器的學習3 新增SeekBar
阿新 • • 發佈:2019-01-30
新增SeekBar
一、佈局
<SeekBar
android:id="@+id/sb"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
二、在服務裡新增方法:
MusicService . java
private void addSeekBar() {
//使用計時器,去不斷的獲取進度的程式碼
Timer timer = new Timer();
//設定計時器
timer.schedule(new TimerTask() {
@Override
public void run() {
int duration = player.getDuration();
int currentPosition = player.getCurrentPosition();
Message msg = MainActivity.handler.obtainMessage();
Bundle bundle = new Bundle();
bundle.putInt("duration" , duration);
bundle.putInt("currentPosition", currentPosition);
msg.setData(bundle);
MainActivity.handler.sendMessage(msg);
}
}, 5, 500);
}
通過getDuration()方法可以獲得時長,通過getCurrentPosition()可以獲得當前播放位置。
這裡需要用handler,並且使用了Bundle傳遞,注意是在MainActivity.java中定義的Handler。
最後,讓它每隔500毫秒更新一次進度,使用了Timer 計時器。
public static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle bundle = msg.getData();
int duration = bundle.getInt("duration");
int currentPosition = bundle.getInt("currentPosition");
sb.setMax(duration);
sb.setProgress(currentPosition);
}
};
給SeekBar設定滑動監聽:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sb = (SeekBar) findViewById(R.id.sb);
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//拖動呼叫
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
//當手指按下進度條,開始呼叫
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
//離開呼叫
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress = seekBar.getProgress();
mi.seekTo(progress);
}
});
}
因為是通過服務這個中間者來傳遞資料的所以需要在服務裡新增seekTo()方法:
private void seekTo(int progress) {
player.seekTo(progress);
}
在介面中新增抽象方法:
public interface MusicInterface {
void play();
void pause();
void stop();
void continuePlay();
void seekTo(int progress);
}