Android/Java-在我绘制的画布上放大
我已经创建了一个二维迷宫,它由两组布尔数组组成,参考了迷宫的垂直面和水平面。这个迷宫目前是12 x 12,但是我只想显示5 x 5 是否有一种方法可以将迷宫缩放到用户所在位置的5 x 5圆周,然后在每次移动时显示下一个块,因此仅显示5 x 5 理想情况下,我想坚持把整个东西画出来,然后简单地进行鸟瞰视图缩放(这将提高可用性,通常会加快应用程序的速度) 编辑 下面是我目前用来画迷宫的代码。但是,在我移动用户圈时,下面的代码似乎没有绘制正确的v和hlineAndroid/Java-在我绘制的画布上放大,java,android,camera,zooming,maze,Java,Android,Camera,Zooming,Maze,我已经创建了一个二维迷宫,它由两组布尔数组组成,参考了迷宫的垂直面和水平面。这个迷宫目前是12 x 12,但是我只想显示5 x 5 是否有一种方法可以将迷宫缩放到用户所在位置的5 x 5圆周,然后在每次移动时显示下一个块,因此仅显示5 x 5 理想情况下,我想坚持把整个东西画出来,然后简单地进行鸟瞰视图缩放(这将提高可用性,通常会加快应用程序的速度) 编辑 下面是我目前用来画迷宫的代码。但是,在我移动用户圈时,下面的代码似乎没有绘制正确的v和hline public void onDraw(Ca
public void onDraw(Canvas canvas)
{
canvas.drawRect(0, 0, width, height, background);
mazeSizeX = 5 + maze.getCurrentX();
mazeSizeY = 5 + maze.getCurrentY();
for(int i = maze.getCurrentX(); i < mazeSizeX; i++)
{
for(int j = maze.getCurrentY(); j < mazeSizeY; j++){
float x = j * totalCellWidth;
float y = i * totalCellHeight;
if(j < mazeSizeX -1 && vLines[i][j]) {
//we'll draw a vertical line
canvas.drawLine(x + cellWidth, //start X
y, //start Y
x + cellWidth, //stop X
y + cellHeight, //stop Y
line);
}
if(i < mazeSizeY -1 && hLines[i][j]) {
//we'll draw a horizontal line
canvas.drawLine(x, //startX
y + cellHeight, //startY
x + cellWidth, //stopX
y + cellHeight, //stopY
line);
}
}
}
}
提前感谢我将使用两个变量,
scroll_x
和scroll_y
,这两个变量在绘制和移动时使用,以便迷宫始终绘制为5 x 5,您可以使用这两个变量来确定应该绘制的地图部分的偏移量
此外,如果愿意,还可以实现zoom_x
和zoom_y
变量来更改缩放
由于您使用的是onDraw方法,因此排除了我所能想到的“一次绘制所有内容并移动地图”的任何可能性
根据你对问题的描述,这是目前我能给出的最好答案
编辑:
现在,您已经提供了更多信息,下面是为您重新设计的onDraw:
在下面的函数中,如果迷宫大于5 x 5,我使用了maze.scrollX
和maze.scrollY
作为滚动偏移。我还添加了drawSize
属性来定义您要绘制的尺寸。如果你在地图的左上角,这两个都应该设置为零。我自己还没有测试过这段代码,所以请告诉我它是如何工作的
请注意,此代码没有错误检查,如果maze.scrollX
太大,则会导致错误
public void onDraw(Canvas canvas)
{
canvas.drawRect(0, 0, width, height, background);
int drawSizeX = 5;
int drawSizeY = 5;
for(int i = 0; i < drawSizeX - 1; i++)
{
for(int j = 0; j < drawSizeY - 1; j++){
float x = j * totalCellWidth;
float y = i * totalCellHeight;
if(vLines[i + maze.scrollX][j + maze.scrollY]) {
//we'll draw a vertical line
canvas.drawLine(x + cellWidth, //start X
y, //start Y
x + cellWidth, //stop X
y + cellHeight, //stop Y
line);
}
if(hLines[i + maze.scrollX][j + maze.scrollY]) {
//we'll draw a horizontal line
canvas.drawLine(x, //startX
y + cellHeight, //startY
x + cellWidth, //stopX
y + cellHeight, //stopY
line);
}
}
}
}
public void onDraw(画布)
{
canvas.drawRect(0,0,宽度,高度,背景);
int-drawSizeX=5;
int-drawSizeY=5;
对于(int i=0;i
我会使用两个变量,scroll\u x
和scroll\u y
,在绘制时使用,在移动时进行修改,以便迷宫始终绘制为5 x 5,您可以使用这两个变量来确定应该绘制的地图部分的偏移量
此外,如果愿意,还可以实现zoom_x
和zoom_y
变量来更改缩放
由于您使用的是onDraw方法,因此排除了我所能想到的“一次绘制所有内容并移动地图”的任何可能性
根据你对问题的描述,这是目前我能给出的最好答案
编辑:
现在,您已经提供了更多信息,下面是为您重新设计的onDraw:
在下面的函数中,如果迷宫大于5 x 5,我使用了maze.scrollX
和maze.scrollY
作为滚动偏移。我还添加了drawSize
属性来定义您要绘制的尺寸。如果你在地图的左上角,这两个都应该设置为零。我自己还没有测试过这段代码,所以请告诉我它是如何工作的
请注意,此代码没有错误检查,如果maze.scrollX
太大,则会导致错误
public void onDraw(Canvas canvas)
{
canvas.drawRect(0, 0, width, height, background);
int drawSizeX = 5;
int drawSizeY = 5;
for(int i = 0; i < drawSizeX - 1; i++)
{
for(int j = 0; j < drawSizeY - 1; j++){
float x = j * totalCellWidth;
float y = i * totalCellHeight;
if(vLines[i + maze.scrollX][j + maze.scrollY]) {
//we'll draw a vertical line
canvas.drawLine(x + cellWidth, //start X
y, //start Y
x + cellWidth, //stop X
y + cellHeight, //stop Y
line);
}
if(hLines[i + maze.scrollX][j + maze.scrollY]) {
//we'll draw a horizontal line
canvas.drawLine(x, //startX
y + cellHeight, //startY
x + cellWidth, //stopX
y + cellHeight, //stopY
line);
}
}
}
}
public void onDraw(画布)
{
canvas.drawRect(0,0,宽度,高度,背景);
int-drawSizeX=5;
int-drawSizeY=5;
对于(int i=0;i
如果你不知道你今天是怎么做的,很难回答这个问题。我基本上有一个布尔数组,例如true、true、false等,true会画一条实线false nothing。这些将被用作墙壁迷宫。然后我触发一个onDraw立即创建整个迷宫,然后