码迷,mamicode.com
首页 > 移动开发 > 详细

Android 自定义播放器

时间:2015-12-22 16:09:31      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

      如果自己写播放器的话 肯定首先要考虑到播放时间 和 进度条刷新的问题 至于播放和 暂停 就是简单的调一下API而已 

// 直播回放 时间 进度条更新
case UPDATE_TIME:
int progress = control_seekbar.getProgress();
control_play_time.setText(StringUtils
.generateTime(progress * 1000)
+ "/"
+ StringUtils.generateTime(total_time * 1000));
if (progress == total_time) {
mVideoView.stopPlayback();
mVideoView.pause();
mHandler.removeCallbacks(hideControl);
mHandler.removeCallbacks(updateTime);
finish();
}
break;
case HIDE_CONTROL:
startAlphaAnimation(ll_play_control, 1, 0);
break;
case SHOW_CONTROL:
startAlphaAnimation(ll_play_control, 1, 1);
mHandler.postDelayed(hideControl, 5000);
break;

在这里我用的是handler刷新ui 

// 隐藏控制器 
private Runnable hideControl = new Runnable() {
@Override
public void run() {
mHandler.sendEmptyMessage(HIDE_CONTROL);
controlIsShow = false;
}
};
// 更新播放时间和进度条
private Runnable updateTime = new Runnable() {
@Override
public void run() {
control_seekbar.setProgress(++seekbarProgress);
mHandler.sendEmptyMessage(UPDATE_TIME);
mHandler.postDelayed(this, 1000);
}
};

/**
* 初始化播放器控制器
*/
private void initLiveControl() {
control_play_pause.setImageResource(R.drawable.icon_live_pause);

total_time = info.getPlay_time();//这个是我获取到的要播放的视频的总时间

control_seekbar.setMax((int) total_time);//把总时间设置成seekbar的最大值 是为了 快进 以及 进度条刷新的时候好算一些

control_play_time.setText(StringUtils.generateTime(0 * 1000) + "/"
+ StringUtils.generateTime(total_time * 1000));
ll_play_control.setVisibility(View.VISIBLE);
// 更新时间和进度条
mHandler.postDelayed(updateTime, 1000);
// 刚进页面时 5秒后隐藏控制器
mHandler.postDelayed(hideControl, 5000);

// 播放暂停按钮点击事件
control_play_pause.setOnClickListener(this);

这里是设置seekbar 拖动事件 在这里由于自己的项目原因 有几个地方 估计你们都用不到 这里我用到了handler 延时操作 达到了定时器的功能是为了 让播放器的控制器 在一定的时间内 隐藏 

control_seekbar
.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress = seekBar.getProgress();
seekbarProgress = progress;
mVideoView.seekTo(progress * 1000);
mHandler.postDelayed(updateTime, 0);
mHandler.postDelayed(hideControl, 5000);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
mHandler.removeCallbacks(updateTime);
mHandler.removeCallbacks(hideControl);
}

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

同时下面是把时间格式的 字符串(HH:MM:ss || MM:ss) 转换成毫秒值 当时在网上找了半天都没有找到合适 后来干脆就自己写了一个 当然 这对于很多人来说都很简单的 在这里 只是为一些刚出道的朋友 解解乏

// 将时间转换成毫秒
public static long generateMills(String time) {
String[] split = time.split(":");
if (split.length == 2) {
// 只有分秒
long minutes = Long.parseLong(split[0]);
long seconds = Long.parseLong(split[1]);
return seconds * 1000 + minutes * 60 * 1000;
} else if (split.length == 3) {
// 有时分秒
long hours = Long.parseLong(split[0]);
long minutes = Long.parseLong(split[1]);
long seconds = Long.parseLong(split[2]);
return seconds * 1000 + minutes * 60 * 1000 + hours * 60 * 60 * 1000;
}
return 1000;
}

Android 自定义播放器

标签:

原文地址:http://www.cnblogs.com/huangsai/p/5066762.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!