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

hpi*_*que 3 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"
/>
Run Code Online (Sandbox Code Playgroud)

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

先感谢您.

hpi*_*que 5

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

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

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

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