setColor在Android 10(API 29)升级后不工作

57hvy0tb  于 2023-05-05  发布在  Android
关注(0)|答案(4)|浏览(181)

我的准则

paint.setColor(0xFFFFFFFF);

在升级到Android 10之前已成功运行。现在它抛出一个错误:
java.lang.IllegalArgumentException:ID无效,必须在范围[0..16)内
(看起来错误消息已被修剪)
尽管如此

paint.setARGB(255,255,255,255);

工作正常。
我读到过从API开始,setColor也接受长颜色值,我试着显式地把

paint.setColor(parseInt(0xFFFFFFFF));

paint.setColor(valueOf(0xFFFFFFFF));

但都不管用
如何使用setColor?ARGB并不总是为我工作(例如。无法通过指定ARGB创建渐变)。

tuwxkamq

tuwxkamq1#

你可以用一个转换来解决这个问题:

paint.setColor((int)0xFFFFFFFF);

……虽然我无法在自己的机器上重现这种行为……0xFFFFFFFF总是被解释为int(严格来说,即使它超出了范围)。不知道为什么你的编译器选择setColor(long)覆盖。

jhkqcmku

jhkqcmku2#

也许你该试试这个

paint.setColor(ContextCompat.getColor(YourActivity.this,R.color.colorPrimary));
lbsnaicq

lbsnaicq3#

参数值被视为长数字,因此无法计算颜色空间。有两个不同的函数,valueOf(int)和valueOf(long)。只需要强制转换为int就可以使用标准的int值。

valueOf(0xFFFFFFFF.toInt())
0wi1tuuw

0wi1tuuw4#

paint.setColor(Color.pack(Color.parseColor("#00ffff")));

Android SDK〉= 29

相关问题