首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SeekBar - NinePatchDrawable不能转换为LayerDrawable

SeekBar - NinePatchDrawable不能转换为LayerDrawable
EN

Stack Overflow用户
提问于 2018-11-02 09:39:55
回答 1查看 90关注 0票数 0

我将用下面的代码更改SeekBar的颜色。

代码语言:javascript
复制
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。

有人能解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-02 11:54:09

为此,您应该使用您的自定义png,并将其实现如下:

drawable/color_progress.xml

代码语言:javascript
复制
<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>

然后像这样在你的酒吧里使用

代码语言:javascript
复制
 <SeekBar
  ......
 android:progressDrawable="@drawable/color_progress" />

对于空态和填充态,static_slider和active_slider是不同的PNG。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53116045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档