我当前创建了一个自定义的ProgressBar,但是遇到一个问题,如果同时调用setMaxValue()和setValue(),invalidate()将不会调用onDraw()。因此,我深入研究了ProgressBar的源代码,但无法找出它们如何使Progressbar更改(使用动画)。
private synchronized void doRefreshProgress(int id, int progress, boolean fromUser,
boolean callBackToApp, boolean animate) {
int range = mMax - mMin;
final float scale = range > 0 ? (progress - mMin) / (float) range : 0;
final boolean isPrimary = id == R.id.progress;
if (isPrimary && animate) {
final ObjectAnimator animator = ObjectAnimator.ofFloat(this, VISUAL_PROGRESS, scale);
animator.setAutoCancel(true);
animator.setDuration(PROGRESS_ANIM_DURATION);
animator.setInterpolator(PROGRESS_ANIM_INTERPOLATOR);
animator.start();
} else {
setVisualProgress(id, scale);
}
if (isPrimary && callBackToApp) {
onProgressRefresh(scale, fromUser, progress);
}
}
有人可以帮我解释一下视觉进度以及它如何反映ProgressBar的当前进度。谢谢。