[英]View onDraw(Canvas c) versus draw(Canvas c) in android?
我是 android 開發的新手,我正在探索View
。 我遇到了已知的兩種方法onDraw(Canvas c)
和draw(Canvas c)
。
請解釋一下這兩種方法的區別和用法? 使用圖像更新畫布時,哪種方法會提供更好的性能(FPS)?
他們之間是有區別的
onDraw(Canvas c)是一種重寫方法,會在渲染視圖時自動調用。 在這里你可以做額外的繪圖,比如畫圓圈、線條或任何你想要的東西。
draw(Canvas c)用於手動將此視圖(及其所有子視圖)渲染到給定的畫布。 在調用此函數之前,視圖必須已經完成了完整的布局。 實現視圖時,實現onDraw(android.graphics.Canvas)
而不是覆蓋此方法。 如果確實需要覆蓋此方法,請調用超類版本。
或者簡單來說, draw(Canvas c)只是一個視圖函數,您可以在視圖首次呈現后調用它。 此功能可用於在任何視圖上自定義繪圖。 您需要提供此視圖將在其上呈現的畫布,並且您還必須在調用此函數之前在畫布上完成所有繪圖。
就好像有人像我一樣還在尋找答案但沒有找到。
當需要重新繪制視圖時,框架會調用 draw() 方法,然后 draw() 方法會調用 onDraw() 來繪制視圖的內容。
void draw(Canvas canvas)
{
..... do default stuff (background, layers)
onDraw(canvas)
..... do other stuff ( scroll bars, fading edges, children)
}
由於笨拙的 API 文檔,人們對此存在誤解。
簡短的回答是draw(Canvas)
是對 View 的入站調用以執行一些重要的事情,並且在draw(Canvas)
實現中間的某個地方它還會觸發onDraw(Canvas)
回調。
View
時,不要覆蓋draw(Canvas)
。draw()
將為您節省每個周期中一些不需要的調用。更長的答案
draw(Canvas)
。 這是我在 View 代碼中可以找到的內容:
onDraw()
來了有用的提示
您可以將任何視圖渲染到您創建的離屏位圖中,然后在任何地方使用此位圖:
Canvas c = new Canvas(); c.setBitmap(myOffscreenBitmap); myView.draw(c);
onDraw(Canvas)
也可以解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.