2013-10-13 34 views
3

Android View類有一個名爲onDraw的方法,並且onDraw獲得一個畫布。只有用戶永遠不會顯式創建通過的畫布,並且似乎沒有其他方式可以訪問它。Android View類的onDraw方法通過什麼畫布?

傳遞給onDraw的畫布是什麼,它在哪裏創建,並且有一種方法可以訪問它?

謝謝你的幫助。

+0

只在View中設置斷點.onDraw並掃描下面的框架,其中一個應該是ViewRoot – pskink

+0

'Canvas'對象只是在繪圖表面鎖定原生2D庫函數的包裝。如果您想訪問該繪圖表面,則無法訪問私有API,因此無論如何都不明智。你在「onDraw」之外想要做什麼?如果我們知道你的意圖,我們可能會更好地建議如何實現它。 – Dave

回答

0

如從Understanding Canvas and Surface concepts

訂立的視圖隱含具有與之相關聯的畫布。當從特定視圖或特定視圖(即View v和您然後調用v.invalidate())中調用invalidate()時,與該視圖關聯的畫布將發送到視圖的onDraw方法。

當一個視圖包含其他視圖時,層次視圖樹會從進行無效調用的視圖開始遍歷和重繪。

0

ViewRootImpl,視圖層次結構中最上面的類,請求整個可見窗口的Canvas,並將它傳遞到Activity的頂層ViewGroup。然後,每個ViewGroup將該Canvas的子集化版本的 級聯的 傳遞給每個子代Viewdraw()方法。

據我所知,不可能操縱onDraw()(及相關方法)以外的Canvas

您可以嘗試使用由您控制的Canvas的新實例自己調用draw()。這不會在屏幕上繪製任何東西,但是您可以在課程中的其他位置閱讀Canvas,將其轉換爲位圖等。請參閱此答案的示例:Convert view to bitmap on Android