18

次のコードは私のビットマップを定義します:

Resources res = context.getResources();

mBackground = BitmapFactory.decodeResource(res, R.drawable.background);

// scale bitmap
int h = 800; // height in pixels
int w = 480; // width in pixels
// Make sure w and h are in the correct order
Bitmap scaled = Bitmap.createScaledBitmap(mBackground, w, h, true);

...そして、次のコードはそれを実行/描画するために使用されます(スケーリングされていないビットマップ):

canvas.drawBitmap(mBackground, 0, 0, null);

私の質問は、Bitmap scaled元ではなく、の形式で返されるスケーリングされたビットマップを描画するように設定するにはどうすればよいですか?

4

2 に答える 2

35

新しいクラスメンバー変数を定義します。 Bitmap mScaledBackground; 次に、新しく作成したスケーリングされたビットマップをそれに割り当てます。 mScaledBackground = scaled; 次に、drawメソッドを呼び出します。 canvas.drawBitmap(mScaledBackground, 0, 0, null);

上記のスニペットで行ったように画面サイズをハードコーディングすることはお勧めできません。次の方法でデバイスの画面サイズを取得することをお勧めします。

int width = getWindowManager().getDefaultDisplay().getWidth();
int height = getWindowManager().getDefaultDisplay().getHeight();

また、元の背景を拡大縮小して描画することのみを目的として、新しいビットマップを宣言しない方がよいでしょう。ビットマップは多くの貴重なリソースを消費します。通常、電話は、アプリが正常に失敗する前にロードできるビットマップの数MBに制限されています。代わりに、次のようなことを行うことができます。

Rect src = new Rect(0, 0, bitmap.getWidth() - 1, bitmap.getHeight() - 1);
Rect dest = new Rect(0, 0, width - 1, height - 1);
canvas.drawBitmap(mBackground, src, dest, null);
于 2012-05-02T03:04:02.097 に答える
0

スケーリングされたビットマップを描画するには、スケーリングされたビットマップをどこかのフィールド (ここでは と呼ばれますmScaled) に保存し、次のように呼び出します。

canvas.drawBitmap(mScaled, 0, 0, null);

draw メソッド内 (または、現在呼び出している場所) で。

于 2012-05-02T03:05:00.180 に答える