首先在Activity中设置相应参数,如下:

 private ProgressBar pbar;

private static final int REFRESH_TIME = 1;

private long mPosOverride = -1;

// Handler used to update the current time

private TimeHandler mTimeHandler;

private boolean mIsPaused = false;


实现刷新进度的方法:

 private long refreshCurrentTime() {
if (mService == null) {
return 500;
}
try {
final long pos = mPosOverride < 0 ? MusicUtils.position()
: mPosOverride;
if (pos >= 0 && MusicUtils.duration() > 0) {
// refreshCurrentTimeText(pos);
final int progress = (int) (1000 * pos / MusicUtils.duration());
pbar.setProgress(progress);
} else {
pbar.setProgress(1000);
}
// calculate the number of milliseconds until the next full second,
// so
// the counter can be updated at just the right time
final long remaining = 1000 - pos % 1000;
// approximate how often we would need to refresh the slider to
// move it smoothly
int width = pbar.getWidth();
if (width == 0) {
width = 320;
}
final long smoothrefreshtime = MusicUtils.duration() / width;
if (smoothrefreshtime > remaining) {
return remaining;
}
if (smoothrefreshtime < 20) {
return 20;
}
return smoothrefreshtime;
} catch (final Exception ignored) {

}
return 500;
}

/**
* @param delay
* When to update
*/
private void queueNextRefresh(final long delay) {
if (!mIsPaused) {
final Message message = mTimeHandler.obtainMessage(REFRESH_TIME);
mTimeHandler.removeMessages(REFRESH_TIME);
mTimeHandler.sendMessageDelayed(message, delay);
}
}


实现Handler:
/**
* Used to update the current time string
*/
private static final class TimeHandler extends Handler {

private final WeakReference mAudioPlayer;

/**
* Constructor of TimeHandler
*/
public TimeHandler(final MusicWaveActivity player) {
mAudioPlayer = new WeakReference(player);
}

@Override
public void handleMessage(final Message msg) {
switch (msg.what) {
case REFRESH_TIME:
final long next = mAudioPlayer.get().refreshCurrentTime();
mAudioPlayer.get().queueNextRefresh(next);
break;
default:
break;
}
}
};

最后在Activity 中的操作;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.home);
mTimeHandler = new TimeHandler(this);
}
@Override
protected void onDestroy() {
mIsPaused = false;
mTimeHandler.removeMessages(REFRESH_TIME);
}
@Override
protected void onResume() {
queueNextRefresh(1);
}

更多相关文章

  1. Android(安卓)Stdio实现点击按钮出现图片
  2. Android文件下载进度条的实现
  3. Android实现录制视频
  4. android实现gallery一个一个滑动
  5. Google protobuf在android下面运用
  6. android获取屏幕分辨率实现
  7. Android放大镜实现的两种方式
  8. android 对话框中的进度条 (ProgressDialog)
  9. 浅谈Java中Collections.sort对List排序的两种方法

随机推荐

  1. android 中Message、Handler、Message Qu
  2. Android线程模型解析(包括UI的更新)
  3. Android流媒体播放器
  4. android:gravity和android:layout_gravit
  5. Android(安卓)传感器
  6. Android(安卓)NDK开发使用以及so文件生成
  7. Google Android开发精华教程
  8. Android线程模型解析(包括UI的更新)
  9. android的编译和运行过程深入分析
  10. Android消息机制字典型探究(二)