Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在动画期间更改progressbar颜色_Java_Android_Android View - Fatal编程技术网

Java 在动画期间更改progressbar颜色

Java 在动画期间更改progressbar颜色,java,android,android-view,Java,Android,Android View,我想根据进度条的值更改进度条的颜色。我有一个用XML创建的渐变背景 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <c

我想根据进度条的值更改进度条的颜色。我有一个用XML创建的渐变背景

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dp"/>
            <gradient
                android:endColor="#55850000"<!-- green -->
                android:centerColor="#55e6ff00" <!-- yellow -->
                android:startColor="#5500c872" <!-- red -->
                />
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dp"/>
                <gradient
                    android:endColor="#c20600"<!-- green %100 alpha -->
                    android:centerColor="#e6ff00"<!-- yellow %100 alpha-->
                    android:startColor="#00c872"<!-- red  %100 alpha -->
                    />
            </shape>
        </clip>
    </item>

</layer-list>

android:startColor=“#5500c872”
/>
android:startColor=“#00c872”
/>
我的问题是,我想在与背景颜色相同的基础上更改整个进度颜色。假设我的进度达到%60,整个进度条应为黄色。若我的进度达到%90,则整个进度条应为红色。它应该是动态变化的,并且应该与进度的背景颜色相同



这是我使用的动画颜色,不起作用

public class ProgressBarAnimation extends Animation{
    private ProgressBar progressBar;
    private float from;
    private float  to;

    public ProgressBarAnimation(ProgressBar progressBar, float from, float to) {
        super();
        this.progressBar = progressBar;
        this.from = from;
        this.to = to;
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        super.applyTransformation(interpolatedTime, t);
        float value = from + (to - from) * interpolatedTime;
        /*if(value < 25){
            progressBar.getIndeterminateDrawable().setColorFilter(Color.GREEN, PorterDuff.Mode.MULTIPLY);
        }else if(value <=50){
            progressBar.getIndeterminateDrawable().setColorFilter(Color.YELLOW, PorterDuff.Mode.MULTIPLY);
        }else{
            progressBar.getIndeterminateDrawable().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
        }*/
        // NEEDS TO CHANGE COLOR IN HERE !
        progressBar.setProgress((int) value);
    }

}
公共类ProgressBarAnimation扩展了动画{
私人ProgressBar ProgressBar;
私人浮动;
私人浮动到;
公共ProgressBarAnimation(ProgressBar ProgressBar,float from,float to){
超级();
this.progressBar=progressBar;
this.from=from;
这个;
}
@凌驾
受保护的无效应用转换(浮点插值时间,转换t){
超级应用转换(插值时间,t);
浮点值=从+(到-从)*插值时间;
/*如果(值<25){
progressBar.GetIndeterminatedRavable().setColorFilter(Color.GREEN,PorterDuff.Mode.MULTIPLY);

}else if(value我最近做了类似的事情,也很难找到一个简单的例子,所以我想与大家分享一下。主要区别是我将进度条的颜色设置为黄色(0%)、橙色(50%)和红色(100%)之间更细的渐变:

。。。
ValueAnimator ValueAnimator=ValueAnimator.ofInt(当前进度,最终进度);
值Animator.setDuration(3000);
valueAnimator.addUpdateListener(新的valueAnimator.AnimatorUpdateListener(){
@凌驾
动画更新上的公共无效(ValueAnimator ValueAnimator){
int[]startRGBs=getRGBColors(活动,R.color.progress\u条\黄色);
int[]midRGBs=getRGBColors(活动,R.color.progress\u条\橙色);
int[]endRGBs=getRGBColors(活动,R.color.progress\u条红色);
//根据进度的一半(<或>50%)更改开始或结束颜色
//(这样做是为了使过渡更加平滑,因为例如,橙色/红色之间的蓝色值相同)
如果(进展百分比50)进展百分比-=50;
返回(startColor-(int)数学四舍五入(((双)百分比进行)*((双)颜色差异/50));
}
因此,如果您希望以特定的间隔而不是渐变来简单地切断进度条颜色,可以忽略上面的所有RGB计算,只需根据进度值设置ProgressDrawable颜色:

int progressColorId;
if(progressValue < 25) progressColorId = Color.GREEN;
else if(progressValue <= 50) progressColorId = Color.YELLOW;
else progressColorId = Color.RED;

Drawable progressDrawable = progressBar.getProgressDrawable().mutate();
progressDrawable.setColorFilter(progressColorId, PorterDuff.Mode.MULTIPLY);
progressBar.setProgressDrawable(progressDrawable);
int-progressColorId;
如果(progressValue<25)progressColorId=Color.GREEN;
else if(progressValue)
int progressColorId;
if(progressValue < 25) progressColorId = Color.GREEN;
else if(progressValue <= 50) progressColorId = Color.YELLOW;
else progressColorId = Color.RED;

Drawable progressDrawable = progressBar.getProgressDrawable().mutate();
progressDrawable.setColorFilter(progressColorId, PorterDuff.Mode.MULTIPLY);
progressBar.setProgressDrawable(progressDrawable);