Android 10(API 29)升级后,setColor不起作用

时间:2019-12-22 13:59:13

标签: java android paint

我的代码

paint.setColor(0xFFFFFFFF);

在升级到Android 10之前已成功运行。现在它会引发错误:

  

包装的java.lang.IllegalArgumentException:无效的ID,必须位于   范围[0..16)

(看起来像修剪了错误消息)

尽管如此,

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

工作正常。

我已阅读到从API 29开始,setColor也接受长颜色值,我尝试显式放置

paint.setColor(parseInt(0xFFFFFFFF));

paint.setColor(valueOf(0xFFFFFFFF));

但是他们都不起作用...

任何解决方案如何使用setColor? ARGB并不总是对我有用(例如,无法通过指定ARGB创建渐变)。

3 个答案:

答案 0 :(得分:0)

您可以通过强制修复此问题:

paint.setColor((int)0xFFFFFFFF);

...尽管我无法在自己的机器上重现此行为... 0xFFFFFFFF始终被解释为int(严格来说,即使超出范围)。不确定编译器为何选择setColor(long)替代。

答案 1 :(得分:0)

也许您应该尝试这个。

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

答案 2 :(得分:0)

参数值被视为长整数,因此它无法计算色彩空间。有两个不同的函数,valueOf(int)和valueOf(long)。只需将其强制转换为int即可使用标准int值。

valueOf(0xFFFFFFFF.toInt())