Android更改后台xml的形状不起作用

时间:2015-07-05 05:44:41

标签: android

我有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。

谢谢

非常感谢

1 个答案:

答案 0 :(得分:0)

我使用了错误的方法。

正确的方法是:

    if (progress==100){
        mProgress.setProgress(0);
        mProgress.setProgressDrawable(getResources().getDrawable(R.drawable.circle_progress_foreground_100));
        mProgress.setProgress(100);
    }