在Android Canvas上绘制移动网格?

时间:2014-12-22 00:17:57

标签: android canvas grid

是否可以在回收点的画布上创建和绘制移动网格?我想在Android画布上创建一个Grid,当一个点到达屏幕底部时,它会向下移动并回收它的点。

问题的第一部分是:如何在Android Canvas上绘制带有线条的网格? 第二部分:如何滚动和重复? 网格看起来应该是这样的:

enter image description here

我已尝试使用Bitmap执行此操作,但我不确定它是否与使用“绘制线”功能一样高效。另外,在使用位图时我无法访问网格点,因此在尝试绘制图形时它不是很有用。

3 个答案:

答案 0 :(得分:0)

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

        float gridSize = 20f;
   var ecart = Math.Max(MaxHeight, MaxWidth) / gridSize;

    //last j index value
    int lj= 0;
    //last i index value
    int li = 0;
    for (int j = 0; j <= Math.Min(canvas.Width, canvas.Height); j += (int)ecart)
    {
        for (int i = 0; i <= Math.Max(canvas.Width, canvas.Height); i += (int)ecart)
        {
            li = i;
        }
        lj = j;
    }
    canvas.ClipRect(0, 0, lj, canvas.Height);

    for (int j = 0; j <= Math.Min(canvas.Width, canvas.Height); j += (int)ecart)
    {
        for (int i = 0; i <= Math.Max(canvas.Width, canvas.Height); i += (int)ecart)
        {
            //horizontal lines
            canvas.DrawLine(j, i, i, i, paint);

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

答案 1 :(得分:0)

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

的直接链接

enter image description here

说明非常简单,如果您想了解更多有关其工作原理的信息,可以查看Wiki页面。

如果您有兴趣,这里是指向库source code的链接。

答案 2 :(得分:0)

要标记 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);
     }
   }