android decodeResource为xml位图返回null - API级别7

Łuk*_*rko 9 android

我有一个奇怪的情况:将我的PNG从/ drawable-hdpi /移动到/ drawable /并将XML位图放到/ drawable-hdpi /后,我无法用BitmapFactory.decodeResource()方法解码这些位图- 它返回null.更奇怪的是:

  1. 我可以用这个方法解码实际的png文件(给出实际的drawable id)
  2. 我可以使用context.getResources().getDrawable(xml_id)- 获得drawable
  3. 所有ImageViews组件都被正确解码(但这是由于第2页我认为)

我在logcat中看到的是:

12-03 16:18:13.557:D/skia(2566):--- SkImageDecoder :: Factory返回null
12-03 16:18:13.557:D/skia(2566):--- SkImageDecoder :: Factory返回null
12-03 16:18:13.567:D/skia(2566):--- SkImageDecoder :: Factory返回null

所以我会猜测解码器被给予xml文件来解码而不是实际的资源(我检查的是有效的).

任何提示?是否可以BitmapFactory.decodeResource()使用xml位图?顺便说一下,我正在使用API​​ 7.

而且我也尝试将原始lpngs放入drawable-nodpi中,但这也无济于事.谢谢

Raf*_*ael 8

获取drawable,然后转换为Bitmap:

Drawable drawable = getResources().getDrawable(resId);
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
Run Code Online (Sandbox Code Playgroud)

现在您可以使用Bitmap对象.

  • 我收到一个错误:`android.graphics.drawable.StateListDrawable无法强制转换为android.graphics.drawable.BitmapDrawable` (2认同)

hac*_*bod 0

XML 位图到底是什么?BitmapFactory.decodeResource() 加载位图图像 - 您应该使用 PNG 或 JPEG 图像,而不是其他图像。

请停止向 -hdpi 和 -nodpi 或其他内容随意添加内容。对于给定的资源名称,所有不同的 dpi 限定符或类似内容都提供同一事物的不同变体。您不应该将其中一些作为位图,而另一些作为 XML 文件,将 -nodpi 与其他变体混合使用也是没有意义的。

  • 好吧,也许我使用了不正确的表达式,意思是 **XML 中的别名资源 ID** 请参阅:[link]http://developer.android.com/guide/topics/resources/drawable-resource.html#位图。 (2认同)