Android音乐播放器的播放进度条(转)

音乐播放是MediaPlayer这个类控制的,进度条SeekBar可以用来显示播放进度,用户也可以利用SeekBar的滑块来控制音乐的播放。两个按钮一个用来播放歌曲启动线程,另一个取消线程和停止播放歌曲。

SeekBar:

设置滑块的位置方法为:setProgress(int value);

设置最大值的方法为:setMax(int value);

MusicPlayer:

播放音乐方法为:start();

停止音乐播放的方法为:stop();

控制音乐播放位置为:seekTo(int value);

获得音乐长度为:getDuration();

获得现在播放的位置:getCurrentPosition();

Handler:

启动线程:post(Runnable runnable);

取消线程:removeCallbacks(Runnable runnable);

延迟启动线程(time 单位为毫秒):postDelayed(Runnable, int time);

代码如下:

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
public class Test extends Activity {
 
 private Button button1;
 private Button button2;
 private SeekBar seekBar1;
 private MediaPlayer player;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
        findView();
        setListener();
    }
    
    private void init() {
     player = MediaPlayer.create(this, R.drawable.example);
    }
    private void findView() {
     button1 = (Button)findViewById(R.id.button1);
     button2 = (Button)findViewById(R.id.button2);
     seekBar1 = (SeekBar)findViewById(R.id.seekbar1);
     //获得歌曲的长度并设置成播放进度条的最大值
  seekBar1.setMax(player.getDuration());
    }
    
    Handler handler = new Handler();
    Runnable updateThread = new Runnable(){
     public void run() {
      //获得歌曲现在播放位置并设置成播放进度条的值
        seekBar1.setProgress(player.getCurrentPosition());
      //每次延迟100毫秒再启动线程
      handler.postDelayed(updateThread, 100);
     }
    };
    
    private void setListener() {
     button1.setOnClickListener(new Button.OnClickListener(){
   @Override
   public void onClick(View arg0){
          player.start();
          //启动
    handler.post(updateThread);
   }  
     });
     button2.setOnClickListener(new Button.OnClickListener(){
   @Override
   public void onClick(View arg0) {
    player.stop();
    //取消线程
    handler.removeCallbacks(updateThread);
   } 
     });
     seekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   @Override
   public void onProgressChanged(SeekBar seekBar, int progress,
     boolean fromUser) {
    // fromUser判断是用户改变的滑块的值
    if(fromUser==true){
     player.seekTo(progress);
    }
   }
   @Override
   public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
   }
   @Override
   public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub  
   }
     });
    }
                             
}

seekBar要绑定setOnSeekBarChangeListener()事件,三个方法第一个是滑块滑动时调用的,第二个是滑动开始滑动时调用的,第三个是滑动停止时调用的。

你可能感兴趣的:(Android)