次のような ProgressBar をカスタマイズするために使用される既存のレイヤーリストがあります。
style_progress_bar.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"
android:drawable="#F6F3F1" />
<item android:id="@android:id/secondaryProgress">
<scale
android:drawable="#DE0012"
android:scaleWidth="100%" />
</item>
<item android:id="@android:id/progress">
<scale
android:drawable="#DE0012"
android:scaleWidth="100%" />
</item>
</layer-list>
このレイヤー リストは、ProgressBar の progressDrawable 属性をオーバーライドするために使用され、チャームのように機能します。
さて、同じバックボーンを使用したいのですが、2 番目と 3 番目の項目の色をプログラムで変更したいと思います。これは、多くの状況で進行状況の色を変更する必要があり、大量の xml ファイルを作成することは私がしたくないことだからです。良い考えではありません。
上記のファイルを読み、2 番目と 3 番目の項目を読むことができましたが、これら 2 の色を変更する適切な解決策が見つかりません。色の問題を除いて、すべてが期待どおりに機能します。
LayerDrawable layers = (LayerDrawable) getResources().getDrawable(R.drawable.style_progress_bar);
int color = getResources().getColor(colorId); // This is the ID of the new color. I use it elsewhere so this should be 100% good
layers.getDrawable(1).setColorFilter(color, PorterDuff.Mode.MULTIPLY);
layers.getDrawable(2).setColorFilter(color, PorterDuff.Mode.MULTIPLY);
// I even called invalidate(); after all this. Nothing changed
これを締めくくるのに本当に近づいているような気がしますが、行き詰まりました。
何か案は?ありがとう!