[英]Android/ Java - Zooming in on my drawn canvas
我創建了一個2D迷宮,它由2組布爾數組組成,並指向迷宮的垂直壁和水平壁。 該迷宮當前為12 x 12,但是我只想顯示5 x 5。
有沒有一種方法可以將迷宮縮放到用戶所在位置的5 x 5周長,然后每次移動時僅顯示下一個塊,因此只能顯示5 x 5。
理想情況下,我想堅持將整個內容繪制出來,然后簡單地進行某種鳥瞰縮放(這將提高可用性並總體上加快應用程序的速度)。
編輯下面是我目前用來繪制迷宮的代碼。 但是,當我移動用戶圈時,以下代碼似乎未繪制正確的v和hLines。
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);
}
}
}
}
注意-mazeSizeX和Y最初設置為5。關於我要去哪里的任何進一步指導,將不勝感激。
編輯2:請參見下圖以指示用戶可能采取的3個不同步驟來幫助進一步解釋我遇到的問題。 第一個圖像是起點,並已按其原樣繪制,但是當我開始移動時,圍繞線條的用戶圓無法正確繪制。
最后,請參見下面我正在使用的當前布爾數組以繪制位智牆:
boolean[][] vLines = new boolean[][]{
{true ,false,false,false,true ,false,false},
{true ,false,false,true ,false,true ,true },
{false,true ,false,false,true ,false,false},
{false,true ,true ,false,false,false,true },
{true ,false,false,false,true ,true ,false},
{false,true ,false,false,true ,false,false},
{false,true ,true ,true ,true ,true ,false},
{false,false,false,true ,false,false,false}
};
boolean[][] hLines = new boolean[][]{
{false,false,true ,true ,false,false,true ,false},
{false,false,true ,true ,false,true ,false,false},
{true ,true ,false,true ,true ,false,true ,true },
{false,false,true ,false,true ,true ,false,false},
{false,true ,true ,true ,true ,false,true ,true },
{true ,false,false,true ,false,false,true ,false},
{false,true ,false,false,false,true ,false,true }
};
提前致謝
我將使用兩個變量: scroll_x
和scroll_y
,它們在繪制時使用,在移動時進行修改,這樣迷宮總是以5 x 5的比例繪制,並且您可以使用這兩個變量來確定應繪制地圖哪個部分的偏移量。
另外,您可以根據需要實現zoom_x
和zoom_y
變量來更改縮放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);
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.