如何设置paint.setColor(R.color.white)?

32

我有一个使用Paint和Canvas绘制对象的自定义视图。我的问题是如何设置:

int color = R.color.white;
paint.setColor(color);

我从我的/res/values/color.xml中获取资源,其中包含类似于

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="white">#FFFFFF</color>
    <color name="black">#000000</color>
    ...
</resources>
5个回答

65
int color = ContextCompat.getColor(context, R.color.white);
paint.setColor(color);

setColor() 方法需要一个颜色数字作为 int 值,但不接受一个资源id,即使一个资源id也是 int 类型。


4
资源文档称,该方法已在API级别23中被弃用,请参阅此答案。链接:https://dev59.com/HlwZ5IYBdhLWcg3wVO9U#31590927。 - Selçuk Cihan
1
同意,这是一条重要通知。 - olshevski
2
@SelçukCihan,我根据您的评论编辑了这个答案。 - Johnny Five

14

首先从XML文件中获取你的颜色。

int color = context.getResources().getColor(R.color.colorPrimary); // old

现在已经弃用,使用这个代替

int color = ContextCompat.getColor(context, R.color.colorPrimary); // new

设置颜色

paint.setColor(color);

XML文件预览:res/values/color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>

1
谢谢!你救了我好几个小时的时间,因为我不用再在网上搜索处理API兼容性问题了。 - Mitselplik

11

尝试使用 color.white

paint.setColor(Color.white)

2
嗯...看起来这并没有回答问题(至少不是我的理解 :-))——这个问题是关于如何访问在资源中声明的自定义颜色(而不是预定义的颜色)。 - kleopatra
这并没有回答问题,问题是如何获取预定义的颜色资源的int值,以便在paint.setColor(...)中使用。而且应该是Color.WHITE(全大写),而不是Color.white。完全没有用。 - ONE

2
paint.setColor(Color.parseColor("#FFFFFF"))

0

设置任何颜色

paint.setColor( Color.rgb(R, G, B) )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接