web-dev-qa-db-ja.com

Android-キャンバス内にビットマップを描画する

私は現在、5 x 5の正方形を描く迷路ゲームを持っています(画面の幅を取り、それを均等に分割します)。次に、x座標とy座標を使用するこれらのボックスのそれぞれについて、drawRectを使用して、色付きの背景を描画します。

私が抱えている問題は、この同じ場所に画像を描画する必要があるため、現在の無地の背景色の塗りつぶしを置き換えることです。

これが私が現在drawRectに使用しているコードです(いくつかの例):

// these are all the variation of drawRect that I use
canvas.drawRect(x, y, (x + totalCellWidth), (y + totalCellHeight), green);
canvas.drawRect(x + 1, y, (x + totalCellWidth), (y + totalCellHeight), green);
canvas.drawRect(x, y + 1, (x + totalCellWidth), (y + totalCellHeight), green);

次に、キャンバス内の他のすべての正方形の背景画像も実装する必要があります。この背景には、その上に単純な1pxの黒い線が描画され、現在のコードは灰色の背景に描画されます。

background = new Paint();
background.setColor(bgColor);
canvas.drawRect(0, 0, width, height, background);

可能であればアドバイスをお願いします。もしそうなら、メモリ使用量を最小限に抑え、関連する正方形のスペースを埋めるために拡大および縮小する1つの画像を使用しながら、これを行うための最善の方法は何ですか(これは全体を分割するため、すべての異なる画面サイズで異なります画面幅を均等に)。

6
Raj Labana

Canvasメソッドpublic void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)を使用します。 dstを、画像全体を拡大縮小する長方形のサイズに設定します。

編集:

これは、キャンバス上でビットマップを正方形で描画するための可能な実装です。ビットマップが2次元配列にあると想定します(例:Bitmap bitmapArray[][];)キャンバスが正方形であるため、正方形のビットマップアスペクト比が歪まないこと。

private static final int NUMBER_OF_VERTICAL_SQUARES = 5;
private static final int NUMBER_OF_HORIZONTAL_SQUARES = 5;

.。

    int canvasWidth = canvas.getWidth();
    int canvasHeight = canvas.getHeight();

    int squareWidth = canvasWidth / NUMBER_OF_HORIZONTAL_SQUARES;
    int squareHeight = canvasHeight / NUMBER_OF_VERTICAL_SQUARES;
    Rect destinationRect = new Rect();

    int xOffset;
    int yOffset;

    // Set the destination rectangle size
    destinationRect.set(0, 0, squareWidth, squareHeight);

    for (int horizontalPosition = 0; horizontalPosition < NUMBER_OF_HORIZONTAL_SQUARES; horizontalPosition++){

        xOffset = horizontalPosition * squareWidth;

        for (int verticalPosition = 0; verticalPosition < NUMBER_OF_VERTICAL_SQUARES; verticalPosition++){

            yOffset = verticalPosition * squareHeight;

            // Set the destination rectangle offset for the canvas Origin
            destinationRect.offsetTo(xOffset, yOffset);

            // Draw the bitmap into the destination rectangle on the canvas
            canvas.drawBitmap(bitmapArray[horizontalPosition][verticalPosition], null, destinationRect, null);
        }
    }
9
bobnoble

次のコードを試してください。

Paint paint = new Paint();
Paint.setAntiAlias(true);
Paint.setFilterBitmap(true);
Paint.setDither(true);

canvas.drawBitmap(bitmap, x, y, Paint);

==================

これを参照することもできます answer

2
Omarj