Android-在Canvas中绘制位图

我目前有一个迷宫游戏,它绘制一个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);

如果可以的话,请您提出建议。如果是这样,那么我最好的方法是这样做,同时尽量减少内存使用并拥有一张会扩大和缩小以填充相关正方形空间的图像(这在所有不同的屏幕尺寸上都会有所不同,因为它将整个屏幕分割开屏幕宽度均匀)。

回答:

使用Canvas方法public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint

paint)。设置dst为要缩放整个图像的矩形的大小。

这是在画布上以正方形绘制位图的可能实现。假设位图是二维数组(例如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);

}

}

以上是 Android-在Canvas中绘制位图 的全部内容, 来源链接: utcz.com/qa/415827.html

回到顶部