View的繪制(Android群英傳)

內(nèi)容是博主照著書敲出來的,博主碼字挺辛苦的,轉(zhuǎn)載請注明出處,后序內(nèi)容陸續(xù)會碼出。

這篇文章應(yīng)該在View的測量之后的,忘了發(fā)表,233333
  當(dāng)測量好了一個View之后,我們就可以簡單地重寫onDraw()方法,并在Canvas對象上來繪制所需要的圖形。首先我們來了解一下利用系統(tǒng)2D繪圖API所必須要使用道德Canvas對象。
  要想在Android的界面中繪制相應(yīng)的圖像,就必須在Canvas上進(jìn)行繪制。Canvas就像是一個畫板,使用Paint就可以在上面作畫了。通常需要通過繼承View并重寫它的onDraw()方法來完成繪圖。
  那什么是Canvas呢?一般情況下,可以使用重寫View類中的onDraw()方法來繪圖,onDraw()中有一個參數(shù),就是Canvas canvas對象。使用這個Canvas對象就可以進(jìn)行繪圖了,而在其他地方,通常需要使用代碼創(chuàng)建一個Canvas對象,代碼如下所示。

Canvas canvas = new Canvas(bitmap);

當(dāng)創(chuàng)建一個Canvas對象時,為什么要傳進(jìn)去一個bitmap對象呢?如果不傳進(jìn)入一個bitmap對象,IDE編譯雖然不會報錯,但是一般我們不會這樣做。這是因?yàn)閭鬟M(jìn)去的bitmap與通過這個bitmap創(chuàng)建的Canvas畫布是緊緊聯(lián)系在一起的,這個過程我們稱之為裝載畫布。這個bitmap用來存儲所有繪制在Canvas上的像素信息。所以當(dāng)你通過這種方式創(chuàng)建了Canvas對象后,后面調(diào)用所有的Canvas.drawXXX方法都發(fā)生在這個bitmap上。如果在View類的onQraw()方法中,通過下面這段代碼,我們可以了解到canvas與bitmap直接的關(guān)系。首先在onDraw方法中繪制兩個bitmap,代碼如下所示。

canvas.drawBiimap(bitmap1, 0, 0, null);
canvas.drawBitmap(bitmap2, 0, 0, null);

而對于bitmap2,我們將它裝載到另一個Canvas對象中,代碼如下所示。

Canvas mCanvas=new Canvas(bitmap2);

在其他地方使用Canvas對象的繪圖方法在裝載bitmap2的Canvas對象上進(jìn)行繪圖,代碼如下所示。

mCanvas.drawXXX

通過mCanvas將繪制效果作用在了bitmap2上,再刷新View的時候,就會發(fā)現(xiàn)通過onDraw()方法畫出來的bitmap2已經(jīng)發(fā)生變化,這就是因?yàn)閎itmap2承載了在mCanvas上所進(jìn)行的繪圖操作。雖然我們也使用了Canvas的繪制API,但其實(shí)并沒有將圖形直接繪制在onDraw()方法指定的那塊畫布上,而是通過改變bitmap,然后讓View重繪,從而顯示改變之后的bitmap。這一過程對初學(xué)者來說可能非常難以理解,但是卻非常重要,這對后續(xù)進(jìn)行深入地學(xué)習(xí)和提升繪圖技巧非常有幫助。
  在理解了Canvas對象后,我們就可以調(diào)用Canvas所提供的繪圖方法,來繪制自己想要的圖形了。不管是多么復(fù)雜、精美的控件,它都可以被拆分成一個個小的圖形單元,我們要做的正是找到這些小的繪圖單元并將它們繪制出來。


原文地址View的繪制(Android群英傳)
我的自媒體博客blankj小站,歡迎來逛逛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容