在Android画布上绘制移动网格?

在Android画布上绘制移动网格?,android,canvas,grid,Android,Canvas,Grid,是否可以在画布上创建并绘制移动网格,以循环其点?我想在android画布上创建一个网格,当一个点到达屏幕底部时,该网格向下移动并回收其点 问题的第一部分是:如何在Android画布上绘制带有线条的网格? 第二部分:如何使其滚动并重复? 网格应如下所示: 我尝试过用位图来实现这一点,但我不确定这是否与使用“绘制线”功能一样有效。另外,我在使用位图时无法访问网格点,因此在尝试绘制图形(例如)时,它不是非常有用 我知道为时已晚,但它可以帮助别人; 这将绘制一个完美的网格 注意:这是一个c代码 flo

是否可以在画布上创建并绘制移动网格,以循环其点?我想在android画布上创建一个网格,当一个点到达屏幕底部时,该网格向下移动并回收其点

问题的第一部分是:如何在Android画布上绘制带有线条的网格? 第二部分:如何使其滚动并重复? 网格应如下所示:


我尝试过用位图来实现这一点,但我不确定这是否与使用“绘制线”功能一样有效。另外,我在使用位图时无法访问网格点,因此在尝试绘制图形(例如)时,它不是非常有用

我知道为时已晚,但它可以帮助别人; 这将绘制一个完美的网格 注意:这是一个c代码

float gridSize=20f;
var ecart=Math.Max(MaxHeight,MaxWidth)/gridSize;
//最后j指数值
int lj=0;
//最后一个索引值
int-li=0;

对于(int j=0;j我正在开发一个绘图应用程序,我遇到了同样的问题。我到处搜索,但找不到直接的解决方案。这就是为什么我开发了一个库,可以做到这一点。它创建了一个可以变换的无限网格,包括变换:平移旋转缩放。该库仅生成可见线,这些线显示在视图上,并使用简单的数学实时生成

解释很简单,如果你想了解更多关于它是如何工作的,你可以查看页面


如果您感兴趣,这里有一个指向该库的链接。

要标记Balha的答案:

android/java等价物如下所示:

int canvasWidth = 0;
int canvasHeight = 0;
float gridSize = 20f;
float ecart = Math.max(mCanvasHeight, mCanvasWidth) / gridSize;
//last j index value
int lj= 0;
//last i index value
int li = 0;
canvasWidth = canvas.getWidth();
canvasHeight = canvas.getHeight();
for (int j = 0; j <= Math.min(canvasWidth, canvasHeight); j += (int)ecart)
{
    for (int i = 0; i <= Math.max(canvasWidth, canvasHeight); i += (int)ecart)
    {
        li = i;
    }
    lj = j;
 }

 canvas.clipRect(0, 0, lj, canvas.getHeight());

 for (int j = 0; j <= Math.min(canvasWidth, canvasHeight); j += (int)ecart)
 {
     for (int i = 0; i <= Math.max(canvasWidth, canvasHeight); i += (int)ecart)
     {
        //horizontal lines
        canvas.drawLine(j, i, i, i, paint);

         //vertical lines
         canvas.drawLine(j, i, j, j, paint);
     }
   }
int canvasWidth=0;
int canvasHeight=0;
浮动网格大小=20f;
float ecart=Math.max(mcavasheight,mcavaswidth)/gridSize;
//最后j指数值
int lj=0;
//最后一个索引值
int-li=0;
canvasWidth=canvas.getWidth();
canvasHeight=canvas.getHeight();

对于(int j=0;j必须喜欢那些对某个问题投反对票而不告诉我为什么的人。我不想知道人们为什么投票,但你似乎已经回答了你的第一个问题,并且没有试图回答第二个问题。所以你的帖子可能看起来像是要求某人为你写代码。哦,我不是要代码。我只是在看我正在寻找一些关于如何做的建议。我会手动绘制网格。这比每帧重新绘制一个完整的位图要好,性能方面也更好。编码会稍微复杂一点,但如果你需要网格坐标,那就只需要使用
drawLine()进行几个循环
呼叫更多。好的,谢谢,只是我不确定。现在android应用程序可以用多种语言编写,包括c语言#
int canvasWidth = 0;
int canvasHeight = 0;
float gridSize = 20f;
float ecart = Math.max(mCanvasHeight, mCanvasWidth) / gridSize;
//last j index value
int lj= 0;
//last i index value
int li = 0;
canvasWidth = canvas.getWidth();
canvasHeight = canvas.getHeight();
for (int j = 0; j <= Math.min(canvasWidth, canvasHeight); j += (int)ecart)
{
    for (int i = 0; i <= Math.max(canvasWidth, canvasHeight); i += (int)ecart)
    {
        li = i;
    }
    lj = j;
 }

 canvas.clipRect(0, 0, lj, canvas.getHeight());

 for (int j = 0; j <= Math.min(canvasWidth, canvasHeight); j += (int)ecart)
 {
     for (int i = 0; i <= Math.max(canvasWidth, canvasHeight); i += (int)ecart)
     {
        //horizontal lines
        canvas.drawLine(j, i, i, i, paint);

         //vertical lines
         canvas.drawLine(j, i, j, j, paint);
     }
   }