2012-02-20 64 views
2

我在這裏遇到很大麻煩。我需要在牀上畫一個娃娃(就像在一張醫療牀上),我似乎無法做到。我嘗試通過創建自定義視圖,然後我開始繪製。我用canvas.drawCirclecanvas.drawRect。我設法繪製這個娃娃,但是我根據自定義視圖的高度和寬度來確定它的大小,所以最終我無法設置角度。用畫布繪製圖形並設置角度的最佳方式是什麼?

然後,我試圖設置我的自定義XML屬性(大小),然後包裝其內容。但wrap_content沒有工作,它總是設置爲全屏。所以我也不能使用它,因爲我需要頭部的正確位置來設置身體的其他部分。

我確切需要的是,繪製一些幾何形式,然後單獨操縱它們。比如,用戶選擇移動腿部,然後當他按下向上按鈕時,腿部將設置角度+1。我不知道這是可能的自定義視圖,只有onDraw。我現在真的真的迷失了,請有人至少指出我需要用什麼來實現這一點。

Picture

回答

1

繪製到畫布中時,您可以對要繪製的形狀執行各種轉換。

所以,如果你首先要旋轉整個娃娃,你應該在繪製娃娃之前進行轉換。然後,您可以在該轉換中轉換每個身體部位。例如,一條腿的娃娃。

//save the canvas transformation state 
canvas.save(); 
    //first move the whole doll 
    canvas.translate(dollPosition.x,dollposition.y); 
    //we are now inside the coordinate system of the doll 
    //draw head (Position is now relative to the center of the doll position) 
    canvas.drawCircle(dollHeadPosition.x, dollHeadPosition.y, headRadius, paint); 
    //save the canvas to transform leg independently 
    canvas.save(); 
     canvas.translate(legPosition.x,legPosition.y); 
     //draw leg 
     canvas.drawRect(...); 
     //restore the canvas to get back to your doll coordinate system 
    canvas.restore() 
//restore canvas to get to global coordinate system 
canvas.restore() 

有各種轉換,如旋轉和傾斜等。只需使用自動完成來了解它們的寫法。

(我希望壓痕清楚,它是如何工作)

+0

非常好,我設法繪製整個娃娃,現在調整大小,謝謝你的帖子。但我仍然無法理解我如何旋轉娃娃。例如,我想旋轉頭部和身體,但它從右向左旋轉,而不是從左向右旋轉。我該怎麼做呢? – 2012-02-22 14:51:32

+0

如果我理解正確,你有一個逆時針旋轉,但希望它是時鐘方面?然後,您可以簡單地插入旋轉角度的負值。 如果我回答了您的問題,請接受我的回答,並針對您的新問題提出一個新問題。 – devsnd 2012-02-22 21:28:05

2

最好的辦法是使用RenderScriptOpenGL

它給你最好的性能,但它`很難實現。 Here是很好的教程,共有5章詳細介紹。

+0

這看起來確實不錯,但我想我需要的東西簡單。我並不需要3D。我需要一些簡單的,更多的是2D。這只是一個簡單的數字來表示角度。這是因爲當他按下UP按鈕時,牀會實際上升。簡單的娃娃是一個參考,看看牀是起牀還是身體。我張貼了一張圖片,請看看它。 – 2012-02-20 21:28:14

相關問題