1

次のような 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

これを締めくくるのに本当に近づいているような気がしますが、行き詰まりました。

何か案は?ありがとう!

4

1 に答える 1