我将用下面的代码更改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。
有人能解决这个问题吗?
发布于 2018-11-02 11:54:09
为此,您应该使用您的自定义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。希望这能有所帮助。
https://stackoverflow.com/questions/53116045
复制相似问题