2012年2月26日日曜日

リソースの描画

サンプルの「Snake」を題材として、アプリ作成の基本をまとめるシリーズです。

第五回目は「リソースの描画」です。


まずは、リソースをCanvasに描画する手順についてです。

リソースをBitmapオブジェクトとして取得する場合と、Drawableオブジェクトとして取得する場合とに分けることができます。

◆リソースをBitmapオブジェクトとして取得して描画する場合
①リソースオブジェクトの取得
Resource res = Context.getResource()

②Bitmapオブジェクトの取得
Bitmap image = BitmapFactory.decodeResource(res, R.drawable.画像ファイル名)

③CanvasクラスのメソッドでCanvasに描画
Canvas.drawBitmap(image, int x, int y, Paint p)


◆リソースをDrawableオブジェクトとして取得して描画する場合
①リソースオブジェクトの取得
Resource res = Context.getResource()

②Drawableオブジェクトの取得
Drawable image = res.getDrawable(R.drawable.画像ファイル名)

③DrawableオブジェクトのメソッドでCanvasに描画
image.setBounds(int left, int top, int right, int bottom)
image.draw(Canvas canvas)



次に、「Snake」に於けるリソースの描画です。

「Snake」では、リソースをそのままCanvasに描画してはいません。
まずは、リソースからDrawableオブジェクトとして取得したimageを、CanvasではなくBitmapに、画像データとして描画しています。

【TileView.java】
public void loadTile(int key, Drawable tile) {
Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize, Bitmap.Config.ARGB_8888);//...①
Canvas canvas = new Canvas(bitmap);//...②
tile.setBounds(0, 0, mTileSize, mTileSize);
tile.draw(canvas);//...③
mTileArray[key] = bitmap;
}

①createBitmap()メソッドでBitmapオブジェクト作成
引数のBitmap.Config.ARGB_8888は、Bitmapにフルカラーの色情報を持たせるための設定です。

②Bitmapオブジェクトを引数にして、Canvasオブジェクト作成

③Drawableオブジェクトの描画
引数のcanvasは、Bitmapオブジェクトを引数にして作成したCanvasオブジェクトのため、DrawableオブジェクトはBitmapに描画されます。


そして、このBitmapをCanvasに対して描画しています。

【TileView.java】
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (int x = 0; x < mXTileCount; x += 1) {
for (int y = 0; y < mYTileCount; y += 1) {
if (mTileGrid[x][y] > 0) {
canvas.drawBitmap(mTileArray[mTileGrid[x][y]],
mXOffset + x * mTileSize,
mYOffset + y * mTileSize,
mPaint);
}
}
}
}

0 件のコメント:

コメントを投稿