音乐播放时进度条和时间

音乐播放类,同时控制进度条拖拽更改音乐进度以及获得音乐总时间和当前时间

public class MainActivity extends Activity {



    protected static final String TAG = "MainActivity-->";
private MediaPlayer mediaPlayer;
private SeekBar seekBar;
private Timer timer;
private int duration;
private Handler handler = new Handler(){

public void handleMessage(android.os.Message msg) {


int progress = (Integer) msg.obj;
//设置进度
seekBar.setProgress(progress);


tvTime.setText("当前时间 : "+TimerFormatter.
formatterTime(mediaPlayer.getCurrentPosition())+"\n总时长 : "+
TimerFormatter.formatterTime(mediaPlayer.getDuration()));


};


};
private TextView tvTime;






@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        timer = new Timer();
        
        seekBar = (SeekBar) findViewById(R.id.seekBar);
        tvTime = (TextView) findViewById(R.id.tvTime);
        //设置seekbar进度改变的一个监听
        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//手指停止拖拽时会执行该方法

Log.d(TAG, "onStopTrackingTouch");

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//手指开始拖拽时会执行的方法
Log.d(TAG, "onStartTrackingTouch");
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {

//参数 : fromUser 是用来标识是否来自用户的手动操作  true 用户动过手动方式更改的进度条
//false 反之亦然
//进度条更改时会执行的方法
Log.d(TAG, "onProgressChanged");

if(fromUser){
int currentPositon = (progress * duration) / 100;
//跳转到你所指定的位置进行播放
mediaPlayer.seekTo(currentPositon);
}


}
});
    }
    
    
    /**
     * 播放
     * @param v
     */
    public void btnPlay(View v){
   
   
    try {
mediaPlayer = new MediaPlayer();
//设置播放的流媒体类型  mp3     mp4 视频
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//设置播放音乐文件的路劲
mediaPlayer.setDataSource("/sdcard/herofordawn.mp3");
//准备  就是执行音乐播放相关初始化工作
mediaPlayer.prepare();
mediaPlayer.start();
duration = mediaPlayer.getDuration();

timer.scheduleAtFixedRate(new TimerTask() {

@Override
public void run() {

//每次都要去获取当前音乐的播放位置
int currentP = mediaPlayer.getCurrentPosition();

int progress = (currentP * 100)/ duration ; // 100 / 1000  //0.1% * 100

//发送消息

Message msg = handler.obtainMessage();
msg.obj = progress;
msg.what = 1;
handler.sendMessage(msg);

//System.out.println("当前时间  : "+currentP+"  总时长 : "+duration+"  计算后的值  : "+progress);

}
}, 0, 1000);


} catch (Exception e) {
e.printStackTrace();
}  
    }
    
    /**
     * 暂停
     * @param v
     */
    public void btnPause(View v){
//     /isPlaying 判断音乐是否正在播放
    if(mediaPlayer != null && mediaPlayer.isPlaying()){
    //记住播放的位置
    mediaPlayer.pause();
    }else{
    //跳转到播放的位置
    mediaPlayer.start();
    }
   
    }
    
    
    /**
     * 停止
     * @param v
     */
    public void btnStop(View v){
   
    if(mediaPlayer != null && mediaPlayer.isPlaying()){
   
    mediaPlayer.stop();
    mediaPlayer.release();//释放媒体资源
    mediaPlayer = null;
   
    }
   
    } 

}



时间转换类,将得到的音乐时间毫秒转换为时分秒格式

public class TimerFormatter {


    public static String formatterTime(int currentPosition) {
        SimpleDateFormat sdateformat=new SimpleDateFormat("mm:ss");
        String format = sdateformat.format(new Date(currentPosition + 0));

      return format;
    }
}


发布了50 篇原创文章 · 获赞 6 · 访问量 8万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览