8

android 4.2のStateListDrawableの新しいShapeDrawable()を使用している人は誰ですか?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); 

しかし、これはnullpointerexceptionを投げ、Androidの4.2にはもう動作しません:私はこれを行うために使用される

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

これは素晴らしいですが、これはデフォルトコンストラクタでは動作しなかった理由)= を知って

はお時間:)

答えて

7

をありがとうDrawableContainer.selectDrawable()実現は、Android 4.2に変更されているとShapeDrawableは、引数で構築使用する必要があります。

デフォルトのコンストラクタを使用している場合は、そのmShape.clone(、mutate()mShapenullで呼び出す)はCloneNotSupportedExceptionを投げるとnullを返します。あなたはNullPointerExceptionを取得します。

関連する問題