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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 Android 音乐播放器进度条对映 MP3 播放进度,可以通过以下步骤来操作: 1. 首先需要获取 MP3 文件的总时长,可以使用 MediaPlayer 类的 getDuration() 方法来获取。 2. 然后在播放器开始播放 MP3 文件时,可以使用 Handler 和 Runnable 来定时更新进度条的进度。具体实现可以参考以下代码: ```java final Handler mHandler = new Handler(); Runnable mRunnable = new Runnable() { @Override public void run() { int currentPosition = mediaPlayer.getCurrentPosition(); int totalDuration = mediaPlayer.getDuration(); // 更新进度条的进度 progressBar.setProgress(currentPosition); // 更新播放时间的显示 String currentTime = formatTime(currentPosition); String totalTime = formatTime(totalDuration); tvCurrentTime.setText(currentTime); tvTotalTime.setText(totalTime); // 每隔一秒钟更新一次 mHandler.postDelayed(this, 1000); } }; // 开始播放 MP3 文件 mediaPlayer.start(); // 开始更新进度条的进度 mHandler.postDelayed(mRunnable, 1000); ``` 其中,formatTime() 方法可以将毫秒数换为格式化后的时间字符串,例如 "00:03:45"。 3. 在用户拖动进度条时,可以使用 SeekBar 的 OnSeekBarChangeListener 接口来监听进度条的变化,并调用 MediaPlayer 的 seekTo() 方法来改变播放进度。具体实现可以参考以下代码: ```java progressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { // 用户拖动进度条时,改变播放进度 mediaPlayer.seekTo(progress); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { // 用户开始拖动进度条时,停止更新进度条的进度 mHandler.removeCallbacks(mRunnable); } @Override public void onStopTrackingTouch(SeekBar seekBar) { // 用户停止拖动进度条时,重新开始更新进度条的进度 mHandler.postDelayed(mRunnable, 1000); } }); ``` 通过以上步骤,就可以实现 Android 音乐播放器进度条对映 MP3 播放进度的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值