首先在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 对话框中的进度条 (ProgressDialog)
  2. android 入门demo 进度条
  3. android 下载文件图片圆形进度条
  4. 学习进度十二
  5. Android那些疑惑(2)-LayoutInflater中inflate方法参数的意义
  6. Android一个等待进度条的例子
  7. android 跳转并传递参数
  8. Android 可滚动圆形进度条 滑块和进度在进度条上面跟着滚动
  9. Android seekbar 滑动时上方显示进度

随机推荐

  1. Android横竖屏切换总结(Android资料收藏)
  2. Android 弱引用
  3. Android NDK下载:Download Android 1.5 ND
  4. Android(安卓)悬浮窗 (附圆形菜单悬浮窗)
  5. Android 进度条
  6. How Android Draws Views
  7. android图片放大 缩小 旋转
  8. Layout1.9
  9. Android usb 驱动
  10. Android 查看本机外网IP