Тогда в Java:

му у меня есть Layer-List с элементом с формой и сплошным цветом. Теперь я хочу изменить этот цвет внутри моего кода.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <clip>
            <shape android:id="@+id/seekbar_shape_color">
                <solid android:color="#FFD00000" />
            </shape>
        </clip>

    </item>
</layer-list>

я попытался получить LayerDrawable и запросить первый элемент, теперь я застрял, получая clipDrawable и, наконец, получить ShapeDrawable

LayerDrawable sd = (LayerDrawable) v.getResources().getDrawable(R.drawable.seekbar_progress_bg);
((ClipDrawable) sd.getDrawable(0)).get..();

Мой другой подход состоял в том, чтобы получить ShapeDrawable и установить цвет с помощью colorFilter, но это тоже не работает.

ShapeDrawable sd = (ShapeDrawable) v.getResources().getDrawable(R.id.seekbar_shape_color);
sd.setColorFilter(R.color.cold_color,PorterDuff.Mode.MULTIPLY);

редактировать: Хорошо, поэтому я разработал новый план, я попытался использовать LevelList, как

 <level-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:maxLevel="0" android:drawable="@color/hot_color">
    </item>
    <item android:maxLevel="1" android:drawable="@color/cold_color">
    </item>
</level-list>

я думаю, что значение по умолчанию для уровня равно 0, но я не получаю индикатор выполнения, отображаемый в списке уровней. Также я не знаю, на какой элемент я должен установить setLevel ()

        holder.progressbar.getBackground().setLevel(0);
        holder.progressbar.getIndeterminateDrawable().setLevel(0);
        holder.progressbar.getProgressDrawable().setLevel(0);

эти вызовы дают мне странные результаты, например, только свежие элементы прогрессбара, получающие 100% окраску прогресса, пахнут как проблема с кэшированием.

надеюсь, кто-нибудь может объяснить мне, как правильно использовать LevelList в LayerList для Progressbar, спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос