我有一个奇怪的情况:在将我的png从/drawable-hdpi/移动到/drawable/并将XML位图放到/drawable-hdpi/之后,我无法用BitmapFactory.decodeResource()
方法解码这些位图-它返回null
。更奇怪的是:
- 我可以解码实际的png文件与此方法(给出实际可绘制的id)
- 我可以使用
context.getResources().getDrawable(xml_id)
- 得到可绘制的 - 所有ImageViews组件被正确解码(但这是由于p. 2我想)
我在日志中看到的是:
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 returned null
所以我会大胆猜测解码器是给出xml文件来解码,而不是实际的资源(我检查是有效的)。
提示吗?是否有可能BitmapFactory.decodeResource()
与xml位图?顺便说一句,我正在使用API 7。
我也试过把原来的图形放到draw_nodpi中,但是也没有帮助。由于
获取可绘制图像,然后转换为位图:
Drawable drawable = getResources().getDrawable(resId);
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
现在你可以使用Bitmap对象了
XML位图是用XML定义的指向位图文件的资源。该效果是原始位图文件的别名。XML可以为位图指定额外的属性,如抖动和平铺。
http://developer.android.com/guide/topics/resources/drawable-resource.html我有同样的问题,但我用这个作为一个解决方案。不幸的是,当你解码流时,我看不到任何方法来传递选项。
//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();
}
XML位图到底是什么?bitmapfactory . decoderresource()加载一个位图图像——你应该使用PNG或JPEG图像。
请停止在-hdpi和-nodpi或其他任何随机的东西。对于给定的资源名,所有不同的dpi限定符或诸如此类的东西都提供了同一事物的不同变体。您不应该让其中一些是位图而另一些是XML文件,也没有意义将-nodpi与其他变体混合使用。
当尝试将一个xml位图链接到另一个xml位图时,也会发生此错误
<bitmap
android:src="@drawable/glow"
android:tileMode="disabled" android:gravity="center" >
</bitmap>
其中"glow"是另一个XML位图