我有一个奇怪的情况:将我的PNG从/ drawable-hdpi /移动到/ drawable /并将XML位图放到/ drawable-hdpi /后,我无法使用BitmapFactory.decodeResource()
方法解码这些位图 - 它返回null
。
更奇怪的是:
context.getResources().getDrawable(xml_id)
- 我在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文件来解码而不是实际的资源(我检查过它是有效的)。
任何提示?是否可以使用xml位图BitmapFactory.decodeResource()
?
顺便说一下,我正在使用API 7。
我也尝试将原始lpngs放入drawable-nodpi,但这也无济于事。 感谢
答案 0 :(得分:8)
获取drawable,然后转换为Bitmap:
Drawable drawable = getResources().getDrawable(resId);
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
现在您可以使用Bitmap对象。
答案 1 :(得分:1)
XML位图是XML中定义的指向位图文件的资源。效果是原始位图文件的别名。 XML可以为位图指定其他属性,例如抖动和平铺。
http://developer.android.com/guide/topics/resources/drawable-resource.html
我遇到了同样的问题,但我将其用作解决方法。不幸的是,在解码流时,我没有看到任何传递Options的方法。
//init input stream
is = getContext().getResources().openRawResource(resID);
Bitmap returnBitmap;
//Load bitmap directly - will fail if xml
Bitmap newBmp = BitmapFactory.decodeStream(is, options);
if(newBmp == null){
//Load bitmap from drawable auto scales
newBmp = ((BitmapDrawable) getContext().getResources().getDrawable(resID)).getBitmap();
}
答案 2 :(得分:0)
尝试将xml位图链接到另一个xml位图(如此
)时也会发生此错误<bitmap
android:src="@drawable/glow"
android:tileMode="disabled" android:gravity="center" >
</bitmap>
其中“glow”是另一个xml位图。
答案 3 :(得分:-1)
世界上什么是XML位图? BitmapFactory.decodeResource()加载一个位图图像 - 你应该使用PNG或JPEG图像,没有别的。
请停止随机投入-hdpi和-nodpi等等。对于给定的资源名称,所有不同的dpi限定符或诸如此类的东西都提供不同的变体。你不应该有一些位图和其中一些XML文件,将-nodpi与其他变体混合也没有意义。