【问题标题】:How to draw Canvas on Canvas如何在画布上画画布
【发布时间】:2012-06-06 17:03:04
【问题描述】:

我正在构建一个 android 应用程序,但遇到了一件简单的事情:如何将 Canvas 对象绘制(或“添加”)到另一个 Canvas 对象,例如“合并”它们?

如果这不可能,那么最好的解决方案是什么?

谢谢!

【问题讨论】:

    标签: java android android-canvas


    【解决方案1】:

    这完全取决于您的实现。

    • 如果每个 Canvas 在每一帧都直接从一个数组(形状等)中绘制对象,您可以简单地将一个数组附加到另​​一个数组。这样一来,您的 Canvas 就不需要大刀阔斧地改变,只需将一个数组添加到另一个数组(可能是 ArrayList 将是这里的方式)。

    • 如果不是上述情况,您可能需要进行一些更剧烈的更改。当我遇到类似的问题时,我创建了一个名为 commitChanges() 的新方法,它为现有的 Canvas 添加了一系列更改(在顶部添加线条等)。

      1. 我首先使受影响的区域无效,然后创建了一个具有 Canvas 大小的位图:Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGBA_8888);
      2. 接下来,我从该位图创建了一个画布:Canvas workingDrawing = new Canvas(bmp);
      3. 然后,我将所需的所有内容都绘制到了新的 Canvas 上。在这种情况下,这将是来自您的一个画布的数据。
      4. 现在,在您的其他 Canvas 中,您必须获取刚刚绘制的位图,然后将其绘制到此 Canvas 上。像这样:canvas.drawBitmap(yourDrawnBitmap, 0.0f, 0.0f, null);

    我认为您将面临的困难是将数据从一个 Canvas 传输到另一个 Canvas。但是,无论您的实施如何,上述方法之一都应该对您有效。

    【讨论】:

    • Im doing a sort of "simulator" for the robot im 正在为比赛做准备,但是,有很多“部分”相对于其他部分移动,所以我必须手动计算每个相关部分。我的想法是创建画布,并与现有画布合并,这样定位和旋转就不会成为问题。例如:一个Body有一个头,一个腿,一个脚......当我渲染“Body”时,它会调用renderHead,并获取头部的画布,然后将其放置在正确的位置和旋转上。如果 Head 有眼睛,那么在 drawHead 中,我会调用 drawEyes,然后在 drawHead 中加入眼睛..
    • 在这种情况下你可以做的是让屏幕外的 Canvas 对象都有自己的 Bitmap 对象。在每个 Canvas 中,您可以绘制任意数量的机器人部件(例如,一只手和一只前臂)。然后,您可以将该画布(以及所有其他画布)的位图渲染到“主”画布(link)上。这在系统上可能相当大,所以你最好的赌注是,正如你所说,相对计算每个部分(当手移动时,它也会移动手臂)。这样,您只需要一个 Canvas。
    • 谢谢!我会继续做大计算...:D
    • 如果你想看葡萄牙语的im talking about, go here: http://techlego.blogspot.com.br/search/label/rescue%20b Its,但你可以使用谷歌翻译! =]
    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2013-03-08
    • 2020-10-10
    • 1970-01-01
    相关资源
    最近更新 更多