我有progressBar的背景知识:
circle_prorgress_foreground.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/progress">
<shape
android:innerRadius="@dimen/inner_radius_progress"
android:shape="ring"
android:thickness="@dimen/thickness_progress"
android:useLevel="true">
<gradient
android:startColor="@color/primaryColor"
android:endColor="@color/accentColor"
android:type="sweep" />
</shape>
</item>
</layer-list>
如何看待它是一个渐变,其中start和endcolor不同。如果进度为100,那么它看起来并不是很好和美观,所以我会切换到另一个固定了开始和结束颜色的XML。
circle_progress_foreground_100
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/progress">
<shape
android:innerRadius="@dimen/inner_radius_progress"
android:shape="ring"
android:thickness="@dimen/thickness_progress"
android:useLevel="true">
<gradient
android:startColor="@color/accentColor"
android:endColor="@color/accentColor"
android:type="sweep" />
</shape>
</item>
</layer-list>
这是我切换XML的代码片段:
[...]
int progress = (int) Math.round(100-(day_to_next_event*3.57141));
if (progress>100){
progress = 100;
}
Log.d("PROGRESS_IS", "progress is " + progress);
ObjectAnimator animation = ObjectAnimator.ofInt(mProgress, "progress", progress);
animation.setDuration(500); // 0.5 second
animation.setInterpolator(new DecelerateInterpolator());
animation.start();
mProgress.setProgress(progress);
if (progress==100){
mProgress.setProgress(0);
mProgress.setBackgroundDrawable(getResources().getDrawable(R.drawable.circle_progress_foreground_100));
mProgress.setProgress(100);
}
[...]
My Log.D表示进度为100,但xml根本没有切换(但APP按预期运行)。简单地说,我有第一个用渐变渲染的circle_progress_foreground。
我看到了其他问题,我确实理解如果形状是自定义的,我不能直接从Java改变颜色。如果可以的话,我想直接通过Java进行更改,而不是创建2 XML。
谢谢
非常感谢
答案 0 :(得分:0)
我使用了错误的方法。
正确的方法是:
if (progress==100){
mProgress.setProgress(0);
mProgress.setProgressDrawable(getResources().getDrawable(R.drawable.circle_progress_foreground_100));
mProgress.setProgress(100);
}