2012-06-06 309 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 –