我的Drawable xml文件代表我的自定义进度条:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/background">
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:useLevel="false"
android:thicknessRatio="6.4">
<solid android:color="@android:color/transparent" />
<stroke
android:width="2dp"
android:color="@android:color/darker_gray" />
</shape>
</item>
<item android:id="@+id/progress">
<rotate
android:fromDegrees="270"
android:toDegrees="270">
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="7.0">
<solid
android:id="@+id/progressColor"
android:color="#FBB817" />
</shape>
</rotate>
</item>
</layer-list>
在这里使用:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="150dip"
android:id="@+id/relativeLayout">
<ProgressBar
android:id="@+id/progressBar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="150dip"
android:layout_height="150dip"
android:layout_centerHorizontal="true"
android:indeterminate="false"
android:progressDrawable="@drawable/progressbar" />
<TextView
android:id="@+id/tvProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="progress" />
</RelativeLayout>
我需要在运行时根据某些条件更改标识为progressColor
的纯色。在这里尝试了一切,对我来说没有任何作用。有什么建议?
我试图改变它:
LayerDrawable layerDrawable = (LayerDrawable) getResources().getDrawable(R.drawable.progressbar);
layerDrawable.setDrawableByLayerId(R.id.progressColor, new ColorDrawable(Color.BLUE));
progressBar.setProgressDrawable(layerDrawable);
但它没有改变任何东西。
我在这里找到了解决方案:
View v = findViewById(R.id.relativeLayout);
LayerDrawable layerDrawable = (LayerDrawable) v.getBackground();
final GradientDrawable shape = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.progressColor);
shape.setColor(Color.BLACK);
但这只会让我的应用崩溃。
答案 0 :(得分:0)
我找到了解决方案,但它并不完美,但它可以解决问题。
首先制作另一种具有不同进展色的drawable。
progressbar1.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/background">
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="6.4"
android:useLevel="false">
<solid android:color="@android:color/transparent" />
<stroke
android:width="2dp"
android:color="@android:color/darker_gray" />
</shape>
</item>
<item android:id="@+id/progress">
<rotate
android:fromDegrees="270"
android:toDegrees="270">
<shape
android:id="@+id/shape"
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="7.0">
<solid
android:id="@+id/progressColor"
android:color="#111" />
</shape>
</rotate>
</item>
然后当您需要它时,在绘制进度条之前,只需使用以下代码更改drawable:
Drawable drawable = getResources().getDrawable(R.drawable.progressbar1);
progressBar.setProgressDrawable(drawable);