資源描述:
《CANVAS的使用詳解.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、CANVAS的使用詳解由于在網(wǎng)絡(luò)上找到關(guān)于Canvas的使用都比較抽象,也許是我的邏輯思維不太好吧,總是感覺理解起來比較困難,尤其是對(duì)save()和restore()方法的使用。本篇文章的內(nèi)容就是對(duì)Canvas的使用進(jìn)行一下總結(jié),包括它的兩種不同的使用情節(jié)和它的一些方法進(jìn)行一下說明。?1?Bitmap,可以來自資源/文件,也可以在程序中創(chuàng)建,實(shí)際上的功能相當(dāng)于圖片的存儲(chǔ)空間;2?Canvas,緊密與Bitmap聯(lián)系,把Bitmap比喻內(nèi)容的話,那么Canvas就是提供了眾多方法操作Bitamp的平臺(tái);3?Paint,與Canvas緊密聯(lián)系,是"畫板
2、"上的筆刷工具,也用于設(shè)置View控件上的樣式;4?Drawable,如果說前三者是看不見地在內(nèi)存中畫圖(虛擬的),那么Drawable就是把前三者繪圖結(jié)果表現(xiàn)出來的接口(真實(shí)的)。Drawable多個(gè)子類,例如:位圖(BitmapDrawable)、圖形(ShapeDrawable)、圖層(LayerDrawable)等。?我們打個(gè)簡(jiǎn)單的比方吧:Paint就是畫筆Bitmap就是畫布Canvas就是畫家?于是,畫家可以通過畫筆可以在畫布上進(jìn)行任何的畫畫。?Canvas的兩種使用情形,從Canvas對(duì)象的獲得角度分析:?1、自定義View和自定義S
3、urfaceView中獲得Canvas對(duì)象由于自定義View和SurfaceView在顯示界面中已經(jīng)獲得了顯示區(qū)域,canvas對(duì)象只不過是在其顯示(繪畫)區(qū)域進(jìn)行界面布局的設(shè)計(jì),當(dāng)操作完畢后,系統(tǒng)會(huì)顯示canvas的操作結(jié)果。?自定義View的繪圖方法為:1.//存在canvas對(duì)象,即存在默認(rèn)的顯示區(qū)域2.@Override3.publicvoid?draw(Canvascanvas){4.//canvas繪圖5.}SurfaceView的繪圖方法為,例如:1.SurfaceViewsurfaceView=?new?MySurfaceView(
4、);?//創(chuàng)建一個(gè)Surface對(duì)象1.SurfaceHoldersurfaceHolder=surfaceView.getHolder();?//獲得SurfaceHolder對(duì)象2.Canvascanvas=surfaceHolder.lockCanvas();?//獲得canvas對(duì)象3.//進(jìn)行繪圖操作4.surfaceHolder.unlockCanvasAndPost(canvas);?//釋放canvas鎖,并且顯示視圖2、?在其他情形下,我們需要通過代碼創(chuàng)建一個(gè)Canvas對(duì)象,并且在繪畫成功后,將該畫圖區(qū)域轉(zhuǎn)換為Drawable圖
5、片或者通過setBitmap(bitmap)顯現(xiàn)出來。一般步驟為:1.//創(chuàng)建一個(gè)的Bitmap對(duì)象2.3.Bitmapbitmap=Bitmap.createBitmap(200,?100,Config.ARGB_8888);4.//創(chuàng)建一個(gè)canvas對(duì)象,并且開始繪圖5.Canvascanvas=?new?Canvas(bitmap);6.7.ImageViewimgView=?new?ImageView(this);?//或者其他可以設(shè)置背景圖片的View控件8.9.10.//為ImageView設(shè)置圖像11.//將Bitmap對(duì)象轉(zhuǎn)換為D
6、rawable圖像資12.Drawabledrawable=?new?BitmapDrawable(bitmap);13.imgView.setBackgroundDrawable(drawable);14.15.16.或者簡(jiǎn)單點(diǎn):imgView.setImageBitmap(bitmap);這兩種方式都可以顯示我們的繪圖。Canvas方法分析:?clipXXX()方法族說明:在當(dāng)前的畫圖區(qū)域裁剪(clip)出一個(gè)新的畫圖區(qū)域,這個(gè)畫圖區(qū)域就是canvas對(duì)象的當(dāng)前畫圖區(qū)域了。例如:clipRect(newRect()),那么該矩形區(qū)域就是canv
7、as的當(dāng)前畫圖區(qū)域了。publicint?save()說明:保存已經(jīng)由canvas繪畫出來的東西,在save()和restore()方法之間的操作不對(duì)它們【以前繪制好的,即save保存的】造成影響,例如旋轉(zhuǎn)(roate)等。而且對(duì)canvas的操作(roate和translate)都是臨時(shí)的,restore()后不再存在。publicvoidrestore()說明:復(fù)原sava()方法之前保存的東西資源。drawXXX()方法族說明:以一定的坐標(biāo)值在當(dāng)前畫圖區(qū)域畫圖。注意:圖層會(huì)疊加,即后面繪畫的圖層會(huì)覆蓋前面繪畫的圖層。?需要注意的方法是:pub
8、licvoiddrawRect(floatleft,floattop,floatright,floatbottom,Pai