9

こんにちは、私はこの方法でこれをやっています

Bitmap bm = BitmapFactory.decodeResource(getResources(), android.R.drawable.list_selector_background);

int c = bm.getPixel(bm.getWidth()/2, bm.getHeight()/2);

しかし、bm はnull2NullPointerException行目にあるとおりです。

エラー:

02-12 18:29:57.568: E/AndroidRuntime(5086):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at android.os.Looper.loop(Looper.java:137)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at android.app.ActivityThread.main(ActivityThread.java:4424)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at java.lang.reflect.Method.invokeNative(Native Method)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at java.lang.reflect.Method.invoke(Method.java:511)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at dalvik.system.NativeStart.main(Native Method)
02-12 18:29:57.568: E/AndroidRuntime(5086): Caused by: java.lang.NullPointerException
02-12 18:29:57.568: E/AndroidRuntime(5086):     at com.example.showhide.MainActivity.onCreate(MainActivity.java:38)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at android.app.Activity.performCreate(Activity.java:4465)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
02-12 18:29:57.568: E/AndroidRuntime(5086):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
4

3 に答える 3

7

これは、このリソースが Bitmap ではなく StateListDrawable であるためです。以下を使用する必要があります。

 Drawable d = getResources().getDrawable(android.R.drawable.list_selector_background);

ビットマップであることが確実な場合は、ドローアブルを BitmapDrawable にキャストし、そこからビットマップを取得します。

Drawable currentState = d.getCurrent();
if(currentState instanceof BitmapDrawable)
    Bitmap b = ((BitmapDrawable)currentState).getBitmap();

ビットマップも null の場合があります。

于 2013-02-12T14:02:26.083 に答える
4

BitmapFactory を使用しない場合:

Bitmap bmp = ((BitmapDrawable) context.getResources()
             .getDrawable(R.drawable.list_selector_background)).getBitmap();
于 2014-09-06T08:41:45.417 に答える
4

Resources.getSystem()代わりに使用する必要がありますgetResources

Bitmap bm = BitmapFactory.decodeResource(Resources.getSystem(), android.R.drawable.list_selector_background);

アクセスしようとしているリソースは、自分のリソースではなく、システムのリソースにあるためです。

編集:

間違ったリソースの隣で、セレクター (xml ファイル) であるリソースからドローアブルを取得しようとしています。適切なドローアブル リソースを取得してください:) http://androidxref.com/4.1.1/xref/frameworks/base/core/res/res/drawable/list_selector_background.xml

于 2013-02-12T13:25:31.033 に答える