Android MediaPlayer與SeekBar和Chronometer的簡單結合

 通過Chronometer和SeekBar實現一個簡單的音頻播放進度展示功能,感覺使用Chronometer計時方便很多,之前還是使用TextView來進行展示,現在感覺low了許多,關於Chronometer的用法請參照官方介紹
 


效果圖

這裏寫圖片描述

代碼的實現

  通過Timer定時器設置每隔一秒獲取當前MediaPlayer的播放進度然後賦值給SeekBar。給Chronometer設置初始值SystemClock.elapsedRealtime()表示啓動以來經過的毫秒,再將SeekBar的實時進度賦值給Chronometer。

public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener{


    private SeekBar seekBar;
    private MediaPlayer player;
    private Timer timer;
    private Chronometer time;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekBar = ((SeekBar) findViewById(R.id.seekBar));
        time = ((Chronometer) findViewById(R.id.chronometer));
        timer = new Timer();
        player = MediaPlayer.create(this, Uri.parse("http://video.ooowin.com/video/2017/3/22/f6dd8bf9219a04e5ed4a58394b6f7279.mp3"));
        seekBar.setMax(player.getDuration());
        time.setBase(SystemClock.elapsedRealtime());
        timer.schedule(task,0,1000);
        seekBar.setOnSeekBarChangeListener(this);
    }

    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            seekBar.setProgress(player.getCurrentPosition());
        }
    };

    public void onPlay(View view) {
        switch (view.getId()) {
            //開始
            case R.id.start:
                if(!player.isPlaying())player.start();
                break;
            //暫停
            case R.id.pause:
                if(player.isPlaying())player.pause();
                break;
        }
    }
    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
        time.setBase(SystemClock.elapsedRealtime() - seekBar.getProgress());
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        //拖動進度條
        player.seekTo(seekBar.getProgress());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //關閉定時器
        timer.cancel();
        //停止播放,釋放資源
        if (player.isPlaying()) {
            player.stop();
            player.release();
        }
    }
}

結束語

  
  怎麼樣,一個很簡單的例子。因爲佈局很簡單所以就不貼出佈局代碼了,需要的話可以看下源碼,沒有什麼難點,就是感覺它們仨配合起來挺好的,哈哈。
 
  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章