本人菜鳥一枚,在編寫android中用seekbar控件控制歌曲的進度和seekbar隨着歌曲的播放自動運動的程序有一些自己的見解,希望各位大牛們多多指點······
廢話先不多說了,先貼一張程序的圖吧:
界面不怎么好看,沒經過美化,大家將就這看一下吧。
主要思路是運用線程每隔一秒顯示一下seekbar控件所在的位置,(這個是使進度條隨着歌曲的進度而不斷的變化,如果大家想使進度條增加的更連續,可以改變程序循環運行的時間,使其更快)
我只把關於seekbar的程度拿出來了:
private int position=0;//媒體音樂所播放的位置
private SeekBar seekbar;
public Handler seekbarhandler=null;
public SeekbarThread seekbarthread=null;
//首先定義thread方法。
seekbarthread=new SeekbarThread();
public class SeekbarThread extends Thread {
private SeekBar seekbar;
public void run(){
Message message=new Message();
message.what=1;
seekbarhandler.sendMessage(message);
}
}
//定義handler處理事件
seekbarhandler=new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
if(msg.what==1){
seekbar.setProgress((int)(((double)mediaplayer.getCurrentPosition()/mediaplayer.getDuration())*100));
seekbarhandler.postDelayed(seekbarthread, 1000);
}
}
};
//對於seekbar事件的定義和監聽事件:
seekbar=(SeekBar)findViewById(R.id.seekbar1);
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {//數值的改變
position=arg1;
mediaplayer.start();
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {//開始拖動
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {//停止拖動
mediaplayer.seekTo((int)(((double)position/100)*mediaplayer.getDuration()));//seekbar最大值默認為100,所以這里用100,但是這樣使取值不是特別精確,我沒想出
//其他的什么辦法解決,使其更精確,所以暫時只能用這樣的方法。
}
});
基本上的使用方法就是這樣,第一次寫博客,哪里有不好的地方請大家多提提意見,以后慢慢改正。