8

他の誰かがAndroid4.2の新しいものを使用して問題を抱えていShapeDrawable()ますStateListDrawableか?私はこれを行っていました:

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());

これはうまく機能しますが、デフォルトのコンストラクターでこれが機能しなかった理由を知りたいです=)

お時間をいただきありがとうございます:)

4

1 に答える 1

7

DrawableContainer.selectDrawable()Android 4.2では実現が変更されており、ShapeDrawableargsを使用した構文を使用する必要があります。

デフォルトのコンストラクターを使用する場合、invokemutate() mShapenullの場合、mShape.clone()はをスローCloneNotSupportedExceptionして返しnullます。だからあなたはNullPointerException

于 2012-11-21T09:27:45.407 に答える