7

我目前有一个迷宫游戏,它绘制一个 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 个图像,该图像将扩展和缩小以填充相关的方形空间(这在所有不同的屏幕尺寸上都会有所不同,因为它会分割整体屏幕宽度均匀)。

4

2 回答 2

9

使用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);
        }
    }
于 2012-11-13T13:22:01.250 回答
2

试试下面的代码:

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

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

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

你也可以参考这个答案

于 2012-11-13T13:06:19.297 回答