【问题标题】:Create a new color drawable创建一个新的颜色drawable
【发布时间】:2013-10-24 19:38:55
【问题描述】:

我正在尝试将十六进制值转换为 int,以便创建新的可绘制颜色。我不确定这是否可能,但根据documentation,它应该。它明确要求

公共 ColorDrawable(整数颜色)

在 API 级别 1 中添加 使用指定的创建新的 ColorDrawable 颜色。

参数 color要绘制的颜色。

所以,我的代码无法正常工作,因为我收到 Invalid int: "FF6666" 错误。有什么想法吗?

int decode = Integer.decode("FF6666");
ColorDrawable colorDrawable = new ColorDrawable(decode);

【问题讨论】:

  • 如果提供的答案之一解决了您的问题,请考虑将其验证为已接受的答案,以便其他人知道您的问题已解决。
  • 有一个很好的实用程序类 android.graphics.Color 有一个方法 parseColor。尝试改用它,不要忘记将尖锐 (#) 前缀附加到您的颜色字​​符串表示中,例如#FF6666

标签: java android android-drawable colordrawable


【解决方案1】:

既然你说的是十六进制,你必须以 0x 开头,不要忘记不透明度。

所以基本上:0xFFFF6666

ColorDrawable cd = new ColorDrawable(0xFFFF6666);

您还可以在 /res 中创建一个新的 colors.xml 文件并定义颜色,例如:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="mycolor">#FF6666</color>
</resources>

并简单地获取 R.color.mycolor 中定义的颜色

getResources().getColor(R.color.mycolor)

【讨论】:

  • 我需要的是new ColorDrawable(getResources().getColor(R.color.red))) 谢谢
  • ContextCompat.getColor(getContext(),R.color.red) 兼容性
  • 我们可以使用这个colorDrawable类型变量的cd来改变背景颜色
  • 附带说明,您可以将 ColorDrawable 用于需要 Drawable 的对象,例如 DividerItemDecoration.setDrawable();您可以传递一个 ColorDrawable 来简单地更改分隔线的颜色,而不是使用实际的可绘制布局。
【解决方案2】:

我认为你必须使用:

public static int parseColor(String colorString)

在 API 级别 1 中添加解析颜色字符串,并返回 对应的颜色整数。如果无法解析字符串,则抛出 IllegalArgumentException 异常。支持的格式有:#RRGGBB #AARRGGBB 红色、蓝色、绿色、黑色、白色、灰色、青色、洋红色、黄色、浅灰色、深灰色、灰色、浅灰色、深灰色、浅绿色、紫红色、石灰、 栗色、海军蓝、橄榄色、紫色、银色、蓝绿色

【讨论】:

    【解决方案3】:

    应该是这样的……

    ColorDrawable cd = new ColorDrawable(0xffff6666);
    

    注意我使用了 8 个十六进制数字,而不是 6 个十六进制数字。其中add to transparency

    【讨论】:

    • 但是您希望在适当的“res”文件中包含这些值,而不是硬编码。 Enrichman 的回答是完整的 :)
    • cdToast 的关系如何?
    【解决方案4】:

    要与 ContextCompat 一起使用并重新调整颜色,您可以执行以下操作:

    ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(this, R.color.white));
    

    【讨论】:

    • this 是什么意思?
    • @Christian Context
    【解决方案5】:

    按照上面的建议,对这个问题做个总结:

    1. ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#ce9b2c"));`

    2. ColorDrawable colorDrawable = new ColorDrawable(0xFFCE9B2C); 注意有 8 个十六进制数字,而不是 6 个十六进制数字,这不起作用。全部案例

    3. ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(mContext,R.color.default_color));

    由您选择!

    【讨论】:

    • 如果我有一个颜色数组,那么?
    • @DPrince ,你可以试试这个,int color = Color.HSVToColor(new float[]{...}) 然后在上面使用。
    【解决方案6】:

    这就是我将十六进制颜色转换为 int 并应用于背景的方法 一个视图

    假设我们有一种颜色 #8080000。

    1) 十六进制到整数的转换

    int myColor = Color.parseColor("#808000");
    

    2) 设置背景

    view.setBackgroundColor(context.getColor(myColor));
    

    【讨论】:

    • (context.getColor(myColor) 你是认真的吗?! (context.getColor(COLOR_RESOURCE_ID),它的资源颜色id
    • 什么意思? @user924
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2011-08-19
    • 1970-01-01
    • 2020-06-14
    • 2016-11-02
    • 2012-03-27
    相关资源
    最近更新 更多