gpt4 book ai didi

android - 在 Android 4.2 的 StateListDrawable 中使用默认的 ShapeDrawable

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:51:09 25 4
gpt4 key购买 nike

在 android 4.2 的 StateListDrawable 中使用新的 ShapeDrawable() 时还有其他人遇到问题吗?我曾经这样做过:

ShapeDrawable bg = new ShapeDrawable();    //default Ctor
ShapeDrawable hl = new ShapeDrawable();
hl.getPaint().setColor(color1);
bg.getPaint().setColor(color2);

StateListDrawable s1 = new StateListDrawable();
s1.addState(new int[]{android.R.attr.state_pressed}, hl);
s1.addState(new int[]{}, bg);

但这在 Android 4.2 中不再有效,抛出一个 nullpointerexception :

java.lang.NullPointerException
at android.graphics.drawable.ShapeDrawable.mutate(ShapeDrawable.java:387)
at android.graphics.drawable.DrawableContainer.selectDrawable(DrawableContainer.java:315)
at android.graphics.drawable.StateListDrawable.onStateChange(StateListDrawable.java:106)
at android.graphics.drawable.StateListDrawable.addState(StateListDrawable.java:89)

我通过更改 ShapeDrawable 的构造函数解决了这个问题:

ShapeDrawable bg = new ShapeDrawable(new RectShape());
ShapeDrawable hl = new ShapeDrawable(new RectShape());

现在效果很好,但我想知道为什么这不适用于默认构造函数 =)

感谢您的宝贵时间:)

最佳答案

DrawableContainer.selectDrawable() 实现在 Android 4.2 中发生了变化,ShapeDrawable 必须使用带有 args 的构造。

如果您使用默认构造函数,当调用 mutate() mShapenull 时,mShape.clone() 将抛出 CloneNotSupportedException 并返回 null。所以你得到一个 NullPointerException

关于android - 在 Android 4.2 的 StateListDrawable 中使用默认的 ShapeDrawable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13430858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com