SeekBar-NinePatchDrawable无法强制转换为LayerDrawable

时间:2018-11-02 09:39:55

标签: java android

我将使用以下代码更改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。

有人可以解决此问题吗?

1 个答案:

答案 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。 希望这会有所帮助。