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()事件,三个方法第一个是滑块滑动时调用的,第二个是滑动开始滑动时调用的,第三个是滑动停止时调用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值