如何从android';什么是默认资源?

如何从android';什么是默认资源?,android,bitmap,Android,Bitmap,嗨,我用这种方式做这个 Bitmap bm = BitmapFactory.decodeResource(getResources(), android.R.drawable.list_selector_background); int c = bm.getPixel(bm.getWidth()/2, bm.getHeight()/2); 但是bm是null,因为第二行给出了NullPointerException 错误: 02-12 18:29:57.568: E/AndroidRunti

嗨,我用这种方式做这个

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

int c = bm.getPixel(bm.getWidth()/2, bm.getHeight()/2);
但是bm是
null
,因为第二行给出了
NullPointerException

错误:

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)

您应该使用
Resources.getSystem()
而不是
getResources

Bitmap bm = BitmapFactory.decodeResource(Resources.getSystem(), android.R.drawable.list_selector_background);
因为您试图访问的资源不在您自己的资源中,而是在系统的资源中

编辑:

在错误的资源旁边,您正试图从作为选择器的资源(xml文件)中获取可绘制文件。请获取正确的可提取资源:)

这是因为此资源是一个StateListDrawable,而不是位图。你应使用:

 Drawable d = getResources().getDrawable(android.R.drawable.list_selector_background);
如果确定它是位图,请将drawable转换为BitmapDrawable并从中获取位图:

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

位图也可能为空。

不使用BitmapFactory:

Bitmap bmp = ((BitmapDrawable) context.getResources()
             .getDrawable(R.drawable.list_selector_background)).getBitmap();

@这对我很有帮助,但你能告诉我,我怎样才能得到所有的可绘制的都在StateListDrawable中。在使用getState()时,我总是得到大小为0的int[]值。您能告诉我,如何获得StateListDrawable中的所有可绘制内容吗。使用getState()时,我总是得到大小为0的int[]值。若要获得任何特定状态的可绘制值,请在此StateListDrawable上使用getStateDrawableIndex和getStateDrawable。getState返回当前应用于此StateListDrawable的状态列表。请看:然后如何从中获取位图?通常情况下,不会。基本的可绘制图形可以是形状、颜色、向量等。位图的可能性很小。