, поэтому у меня есть 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);
edit: ок, поэтому я разработал новый план
я пытался использовать 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
спасибо