3

Android 2.0.1 の SD カードに保存されている 480x320 JPEG ファイルを、WVGA854 スキンと 240 液晶密度 (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 はビットマップのサイズを変更しています。この動作の原因は何ですか? どうすれば回避できますか?

前もって感謝します。

4

1 に答える 1

5

Drawable.createFromPath() は、実装で BitmapFactory を使用する便利なメソッドです。API レベル 4 以降、Android はすべてのビットマップ ドローアブルとその他のリソースを自動的に再スケーリングするようです。

ビットマップの元のサイズを取得するには、ドローアブルをビットマップ ドローアブルにキャストし、BitmapDrawable.geBitmap().getWidth() および BitmapDrawable.geBitmap().getWidth() を使用する必要があります。

別の方法として、BitmapFactory を直接使用し、BitmapFactory.Options.inScaled で再スケーリングをオフにすることもできます。このプロパティは API レベル 4 以降でのみ使用できるため、API レベル 3 デバイスをターゲットにする場合は、リフレクションを使用してその存在を確認することをお勧めします。

SD カード イメージにこのような再スケーリングが必要な理由と、これがプログラマーにどのように役立つかはまだわかりません。はい、160 密度の 320x213 領域は、240 密度の 480x320 領域になりますが、Drawable.createFromPath() が 240 密度の 480x320 ドローアブルを 240 密度で実行されているアプリケーションに返すと、より意味がありませんか?

于 2009-12-30T18:07:12.263 に答える