进度栏setValue()是如何构建的?

时间:2019-01-16 08:46:27

标签: android progress-bar ondraw invalidation

我当前创建了一个自定义的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的当前进度。谢谢。

0 个答案:

没有答案