Android 2.0.1 WVGA854中具有意外大小的BitmapDrawable

时间:2009-12-29 07:47:32

标签: android drawable

我想在Android 2.0.1中显示存储在SD卡中的480x320 JPEG文件,其中包含WVGA854皮肤和240 lcd密度(Motorola Droid)。

但是,当我通过Drawable.createFromPath()创建BitmapDrawable时,生成的BitmapDrawable具有以下值:

mBitmapWidth = 320

mBitmapHeight = 213

mTargetDensity = 160

清单包括以下配置:

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4" />
<supports-screens 
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
 anyDensity="true"
/>

显然Android正在调整位图大小。可能是这种行为的原因是什么?我怎么能避免它?

提前谢谢。

1 个答案:

答案 0 :(得分:5)

Drawable.createFromPath()是一种在其实现中使用BitmapFactory的便捷方法。似乎自API级别4以来Android自动重新调整所有位图drawable和其他资源。

要获得位图的原始大小,需要将drawable转换为可绘制的位图,并使用BitmapDrawable.geBitmap()。getWidth()和BitmapDrawable.geBitmap()。getWidth()。

另一种方法是直接使用BitmapFactory并使用BitmapFactory.Options.inScaled关闭重新缩放。此属性仅在API级别4之后可用,因此如果您要定位API级别3设备,则可能需要使用反射来检查其存在。

我仍然不明白为什么SD卡图像需要这样的重新缩放以及它如何以任何方式使程序员受益。是的,160密度的320x213区域变为(大约)240密度的480x320区域,但如果Drawable.createFromPath()将240x密度的480x320 drawable返回到以240密度运行的应用程序,那么它是否更有意义?