我将使用以下代码更改SeekBar的颜色。
public void setColor(SeekBar view, Integer color) {
LayerDrawable drawable = (LayerDrawable) view.getProgressDrawable().getCurrent();
Drawable progress = drawable.findDrawableByLayerId(android.R.id.progress);
progress.setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
一些设备正确运行了代码。但是某些设备将返回java.lang.ClassCastException android.graphics.drawable.NinePatchDrawable无法转换为android.graphics.drawable.LayerDrawable。
有人可以解决此问题吗?
答案 0 :(得分:0)
为此,您应该使用自定义png并实现它:
drawable / color_progress.xml
<item
android:id="@android:id/background"
android:drawable="@drawable/static_slider"/>
<item android:id="@android:id/secondaryProgress">
<scale
android:drawable="@drawable/static_slider"
android:scaleWidth="100%" />
</item>
<item android:id="@android:id/progress">
<scale
android:drawable="@drawable/active_slider"
android:scaleWidth="100%" />
</item>
并像这样在搜索栏中使用
<SeekBar
......
android:progressDrawable="@drawable/color_progress" />
static_slider和active_slider是用于空白和填充状态的不同PNG。 希望这会有所帮助。