2012-06-06 263 views
1

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

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

谢谢!

回答

8

这完全取决于您的实施。

  • 如果每个Canvas直接从每个帧的数组(形状等)绘制对象,则可以简单地将一个数组附加到另​​一个数组。这样,您的画布不需要大幅改动,只需要将一个阵列添加到另一个阵列中(可能需要一个ArrayList)。

  • 如果以上情况并非如此,您可能需要做出一些更大的改变。当我遇到类似的问题时,我创建了一个名为commitChanges()的新方法,它为现有Canvas添加了一系列更改(在顶部添加线等)。

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

我想你会面临的困难是将数据从一个画布转移到另一个。但是,无论您的实施如何,上述方法之一应该对您有效。

+0

我为机器人做了一种“模拟器”,用于竞赛,但是有很多“零件”相对于其他人移动,所以我必须手动计算每个相关部分。我的想法是创建画布,并与现有画面合并,以便定位和旋转不成问题。例如:身体有一个头,腿,脚...当我渲染“身体”时,它会调用renderHead,并获得头部的画布,然后将放置在正确的位置和旋转。如果Head有眼睛,那么在drawHead中,我会调用drawEyes,然后加入drawHead眼睛。 –

+0

在这种情况下你可能会做的是让屏幕Canvas对象具有各自的Bitmap对象。在每个Canvas中,您可以绘制尽可能多的机器人部件(比如,一只手和一只前臂)。然后,您可以将该Canvas的位图(以及所有其他)渲染到“主”Canvas上([link](http://stackoverflow.com/questions/4160149/how-to-draw-on-bitmap-in-安卓))。这在系统上可能相当高,所以如你所说,你更好的选择是相对计算每个部分(如同一只手移动,它也移动手臂)。这样,你只需要一个Canvas。 – Eric

+0

谢谢!我会继续做大计算......:D –