Android 如何随自定义mediaplayer一起显示seekbar
我已经建立了一个自定义媒体播放器,我想显示seekbar也。 seekbar目前正在显示,但不起作用,即播放歌曲时,seekbar没有进展。让我知道我错在哪里。下面是代码Android 如何随自定义mediaplayer一起显示seekbar,android,multithreading,media-player,seekbar,Android,Multithreading,Media Player,Seekbar,我已经建立了一个自定义媒体播放器,我想显示seekbar也。 seekbar目前正在显示,但不起作用,即播放歌曲时,seekbar没有进展。让我知道我错在哪里。下面是代码 public class myPlayer extends Activity implements Runnable,SeekBar.OnSeekBarChangeListener { MediaPlayer mPlayer; Button play,stop; SeekBar seekbar;
public class myPlayer extends Activity implements Runnable,SeekBar.OnSeekBarChangeListener {
MediaPlayer mPlayer;
Button play,stop;
SeekBar seekbar;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
seekbar = (SeekBar)findViewById(R.id.seekbar);
mPlayer = MediaPlayer.create(this,R.raw.sajnave);
play=(Button)findViewById(R.id.play);
stop=(Button)findViewById(R.id.stop);
Toast.makeText(myPlayer.this, ""+mPlayer.getDuration(), Toast.LENGTH_SHORT).show();
play.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mPlayer.start();
}
});
stop.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(myPlayer.this, ""+mPlayer.getCurrentPosition(), Toast.LENGTH_SHORT).show();
mPlayer.stop();
}
});
}
@Override
public void run() {
// TODO Auto-generated method stub
int currentPosition = 0;
int total = mPlayer.getDuration();
seekbar.setMax(total);
while (mPlayer != null && currentPosition < total) {
try {
Thread.sleep(1000);
currentPosition = mPlayer.getCurrentPosition();
} catch (InterruptedException e) {
return;
} catch (Exception e) {
return;
}
seekbar.setProgress(currentPosition);
}
}
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
// TODO Auto-generated method stub
mPlayer.seekTo(arg1);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
}
公共类myPlayer扩展活动实现可运行的SeekBar.onseekbarchanegListener{
媒体播放器mPlayer;
按钮播放,停止;
SeekBar-SeekBar;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
seekbar=(seekbar)findViewById(R.id.seekbar);
mPlayer=MediaPlayer.create(this,R.raw.sajnave);
play=(按钮)findViewById(R.id.play);
停止=(按钮)FindView YID(R.id.stop);
Toast.makeText(myPlayer.this,“+mPlayer.getDuration(),Toast.LENGTH_SHORT.show();
play.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
mPlayer.start();
}
});
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Toast.makeText(myPlayer.this,“+mPlayer.getCurrentPosition(),Toast.LENGTH_SHORT.show();
mPlayer.stop();
}
});
}
@凌驾
公开募捐{
//TODO自动生成的方法存根
int currentPosition=0;
int total=mPlayer.getDuration();
seekbar.setMax(总计);
while(mPlayer!=null&¤tPosition
在mediplayer启动后调用updatePosition()
方法..它对我有效
private final Handler handler = new Handler();
private final Runnable updatePositionRunnable = new Runnable() {
public void run() {
updatePosition();
}
};
private void updatePosition() {
handler.removeCallbacks(updatePositionRunnable);
if (player != null) seekbar.setProgress(player.getCurrentPosition());
handler.postDelaye(updatePositionRunnable, 500);
}
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
// TODO Auto-generated method stub
player.seekTo(arg1);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
在mediplayer启动后调用updatePosition()
方法。它对我有用
private final Handler handler = new Handler();
private final Runnable updatePositionRunnable = new Runnable() {
public void run() {
updatePosition();
}
};
private void updatePosition() {
handler.removeCallbacks(updatePositionRunnable);
if (player != null) seekbar.setProgress(player.getCurrentPosition());
handler.postDelaye(updatePositionRunnable, 500);
}
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
// TODO Auto-generated method stub
player.seekTo(arg1);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
Mohit,您可以将前3行放入代码视图,这可能会更好、更可读。Mohit,您可以将前3行放入代码视图,这可能会更好、更可读。我认为最好稍微修改一下onProgressChanged方法:@Override public void onProgressChanged(请参见kbar arg0、int prgress、boolean fromUser){if(fromUser)player.seekTo(progress);}如果没有if条件,您会感觉声音保持很快暂停,并在播放时再次播放。我认为最好稍微修改一下onProgressChanged方法:@Override public void onProgressChanged(SeekBar arg0,int prgress,boolean fromUser){if(fromUser)player.seekTo(progress);}在没有if条件的情况下,您会感到声音保持很快暂停,并在播放时再次播放。