2010-07-23 110 views
2

我試圖瞭解Android繪圖如何工作。2D繪圖與Android

我希望有人能解釋繪圖組件是如何相互關聯(查看,可繪製,帆布,位圖)

這一切似乎很混亂,文件沒有做很好的工作,解釋它。

通過onDraw()注入到視圖中的Canvas對象內部的位圖是否代表整個顯示或視圖繪製的塊?

什麼提拉做,是封裝了一組命令到一個Canvas對象,他們只是對象?

我希望有人可以幫助我瞭解它是如何工作的,我沒有恩伊java背景只有行動腳本和C#(silverlight)。

回答

10

這是一個非常模糊的問題,但我會給它一個鏡頭。這是我在這個網站上的第一個答案,我絕不是專家,但我發現自己在Android中進行繪圖時做了很多修補。

從我讀過的和經驗豐富,每個視圖有一個位圖,用於繪製在屏幕上查看。每個視圖也有一個畫布。畫布是什麼讓程序員可以控制在這個位圖上繪製的內容。

每個查看對象具有一個onDraw(Canvas c)方法,其用於繪製它。如果你想自己畫一些東西,你可以通過擴展View來創建View類的子類,你可以重寫onDraw(Canvas c)方法來繪製任何你想要的東西。您使用作爲onDraw()方法參數提供的Canvas對象繪製視圖。

drawable只是一個可以繪製的對象。這可能是靜止圖像(bmp,png,jpg等),圖標,動畫gif等。通常可以從要繪製到屏幕上的現有圖像創建drawable。這分兩步完成:將圖像包括到您的項目中,然後繪製圖像。

要包括圖像到你的項目,你可以簡單地將其拖到在Eclipse項目目錄中的RE /繪製的一個文件夾。

一旦圖像文件包含到項目中,R.java文件將自動更新爲該圖像文件的唯一標識。要將圖像文件作爲代碼中的可繪製對象加載,您可以執行類似Drawable d = getResources().getDrawable(R.id.imagefile);的操作。要在畫布上繪製它,您可以使用d.setBounds()方法設置尺寸和位置,並且可以在onDraw()方法中使用d.draw(canvas)在您的視圖中繪製它。

通過的onDraw()方法提供的畫布對象具有用於繪製到視圖許多有用的功能。充分利用它,這是您瞭解如何使用它的最佳方式。另外,不要忘了查看Android開發者網站以查看所有方法的完整列表。

你究竟想用繪畫做什麼?如果您正在嘗試製作類似遊戲的遊戲,則應該考慮使用SurfaceView課程。

這裏有一個自定義視圖類的例子:

public class CustomView extends View{ 
    public void onDraw(Canvas c){ 
     c.drawColor(Color.RED); 
    } 
} 

這種觀點,在創建時,應該只畫本身充滿了紅色。

+0

感謝您的非常好的和簡單的解釋,我開始瞭解它是如何組成的。但它仍然有點模糊組件之間的區別。但正如你所說的那樣,它有助於建立更好的理解。 我不想試圖繪製特別的即時通訊開始學習Android,我喜歡在不同的組件中得到一個很好的洞察力。 – 2010-07-23 20:34:29

+0

哇。真棒回答。謝謝! – 2010-09-09 17:31:19

+0

好的答案,但我會放棄R.java和資源的東西。這是我們想要更好地瞭解的onDraw()和setBounds(),至少在我的情況下。 – pjv 2010-12-30 17:05:03

1

視圖是用戶與之交互的GUI對象。它與一個Canvas關聯。您可以在onSizeChanged()方法中獲得尺寸(您需要在自定義視圖中重寫該尺寸),然後在其onDraw()方法中繪製其Canvas(同樣,您需要覆蓋)

畫布是您用於繪製的對象。 Canvas對象繪製到一個Bitmap對象上。畫布通常代表整個屏幕,所有視圖可能共享相同的畫布。當調用onDraw()時,Canvas將應用一個變換矩陣,並設置其剪裁區域,以便您的渲染調用將使用0,0作爲視圖的左上角,並且您的圖形將會被限制在視圖內。注意:不要使用canvas.getWidth/Height()從view.onDraw()中獲取可繪製區域。這將返回整個屏幕的大小,而不是你想要的。改用view.onSizeChanged()。

您還需要一個傳遞給大多數Canvas繪圖方法的Paint對象。 Paint對象包含用於渲染的顏色,字體,填充樣式和其他數據。

位圖是可以繪製到的東西。它是Canvas基礎的物理屏幕或內存。我相信Canvases和Bitmaps之間存在一對一的對應關係。可以使用canvas.setDevice()方法將Canvas綁定到位圖,或者可以在Canvas的構造函數中完成綁定。我不相信有一種方法可以從Canvas中檢索位圖。

位圖也可以用作源並呈現給畫布。

可繪製對象不是可以繪製到(目標)上的東西,而是呈現給Canvas(源)的東西。通常可從應用程序的資源中獲取Drawable,但也可能從網絡下載或從您的圖庫中檢索等。

+0

感謝您的回覆,它也有助於清理東西!我希望我可以將兩者都標爲答案! – 2010-07-23 20:36:39