【问题标题】:How can I fix GradientDrawable cannot be cast to ColorDrawable issue?如何修复 GradientDrawable 无法转换为 ColorDrawable 问题?
【发布时间】:2014-03-19 18:06:22
【问题描述】:

我有一个代码 sn-p 在下面显示,我正在尝试更改视图的 (v) 背景。我将从TextView(dragged) 获取颜色代码,并使用此代码更改View(v) 的背景。但我收到如上所示的错误。我该如何解决?问题出在哪里?谢谢。

ColorDrawable cd = (ColorDrawable)dragged.getBackground();
    int colorCode = cd.getColor();
    v.setBackgroundColor(colorCode);

【问题讨论】:

  • 请大致描述一下你的想法和你想做什么?将 textview 的背景设置为另一个视图?
  • 我想改变TextViews的背景颜色。我会从另一个TextView(拖)那里得到这个颜色。我还需要在我的代码中使用这个颜色的代码来存储一个存储颜色代码的数组。
  • 看起来您使用渐变作为 textview 的背景。不是吗?
  • 没有。我只是使用 shape.xml 来制作 TextView(dragged) 椭圆形。会不会导致这个?如果是,我该怎么办?
  • 也许您可以尝试使用可绘制的整个背景(getBackground,setBackground)而不是颜色。但这无助于储存颜色。请在调用 getBackground 时尝试调试和检查可绘制对象的类型。是 GradientDrawable 吗?

标签: android android-background colordrawable


【解决方案1】:

如果您只想将一个视图的背景分配给另一个视图,而不仅仅是颜色,您可以使用以下代码

Drawable drawable = dragged.getBackground();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
    v.setBackgroundDrawable(drawable );
}else{
    v.setBackground(drawable);
}

但是,如果您只想获取颜色,则必须提前确定分配给视图的可绘制对象类型。然后使用instanceof来处理如何获取对应drawable的背景颜色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 2019-12-07
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多