在安卓画布上绘制动态网格?

3
是否可以在画布上创建和绘制一个移动的网格,并回收其点?我想在Android画布上创建一个向下移动并在某个点到达屏幕底部时回收其点的网格。
问题的第一部分是:如何在Android画布上绘制带有线条的网格? 第二部分:如何让它滚动并重复? 网格应该看起来像这样:
我已经尝试使用Bitmap来实现这一点,但我不确定是否与使用Draw Line功能一样有效。此外,在使用位图时,我无法访问网格点,因此在尝试绘制图表时并不是很有用。

一定要喜欢那些踩问题却不告诉我原因的人。 - user3011902
我不敢妄自揣测人们投票的原因,但你似乎已经回答了第一个问题,并且没有尝试解决第二个问题。因此,你的帖子可能会被看作是请求别人为你编写代码。 - Mike M.
哦,我并不是在要求编程代码。我只是想寻求一些关于如何实现的建议。 - user3011902
1
我会手动绘制网格。性能方面肯定比每帧重绘完整位图要好。虽然编码会稍微复杂一些,但如果你需要网格坐标,那么只需要再加上几个 drawLine() 循环即可。 - Mike M.
1
好的,谢谢。我只是不确定而已。 - user3011902
3个回答

1

补充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);
     }
   }

1
我正在开发一个绘图应用程序,遇到了同样的问题。我搜索了各处,但没有找到直接的解决方案。这就是为什么我开发了一个库,可以完全做到这一点。它创建了一个无限网格,可以进行变换,包括平移、旋转和缩放等变换。该库只生成可见的线条,在视图上显示,并使用简单的数学实时生成。这里是直接链接到

enter image description here

这个解释相当简单,如果你想了解更多关于它如何工作的信息,可以查看Wiki页面。

这里有一个指向库源代码的链接,如果你感兴趣的话。


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);
        }
    }

现在,Android应用程序可以使用许多编程语言编写,包括C#。 - Balha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接