サンプルの「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);
}
}
}
}