尤其是對save()和restore()方法的使用。本篇文章的內容就是對Canvas的使用進行一下總結,包括它的兩種不同的使用
情節和它的一些方法進行一下說明。
1 Bitmap,可以來自資源/文件,也可以在程序中創建,實際上的功能相當於圖片的存儲空間;
2 Canvas,緊密與Bitmap聯系,把Bitmap比喻內容的話,那麼Canvas就是提供了眾多方法操作Bitamp的平台;
3 Paint,與Canvas緊密聯系,是"畫板"上的筆刷工具,也用於設置View控件上的樣式;
4 Drawable,如果說前三者是看不見地在內存中畫圖(虛擬的),那麼Drawable就是把前三者繪圖結果表現出來的接口(真實的)。
Drawable多個子類,例如:位圖(BitmapDrawable)、圖形(ShapeDrawable)、圖層(LayerDrawable)等。
我們打個簡單的比方吧:
Paint 就是畫筆
Bitmap 就是畫布
Canvas 就是畫家
於是,畫家可以通過畫筆可以在畫布上進行任何的畫畫。
Canvas的兩種使用情形,從Canvas對象的獲得角度分析:
1、 自定義View和自定義SurfaceView中獲得Canvas對象
由於自定義View和SurfaceView在顯示界面中已經獲得了顯示區域,canvas對象只不過是在其顯示(繪畫)區域進行界面布局
的設計,當操作完畢後,系統會顯示canvas的操作結果。
自定義View的繪圖方法為:
[java]
SurfaceView的繪圖方法為,例如:
2、 在其他情形下,我們需要通過代碼創建一個Canvas對象,並且在繪畫成功後,將該畫圖區域轉換為Drawable圖片
或者通過setBitmap(bitmap)顯現出來。一般步驟為:
[java] 這兩種方式都可以顯示我們的繪圖。
clipXXX()方法族
說明:在當前的畫圖區域裁剪(clip)出一個新的畫圖區域,這個畫圖區域就是canvas對象的當前畫圖區域了。
例如:clipRect(new Rect()),那麼該矩形區域就是canvas的當前畫圖區域了。
public int save()
說明:保存已經由canvas繪畫出來的東西,在save()和restore()方法之間的操作不對它們造成影響,例如旋轉(roate)等。
而且對canvas的操作(roate和translate)都是臨時的,restore()後不再存在。
public voidrestore()
說明:復原sava()方法之前保存的東西資源。
drawXXX()方法族
說明:以一定的坐標值在當前畫圖區域畫圖。
注意:圖層會疊加,即後面繪畫的圖層會覆蓋前面繪畫的圖層。
需要注意的方法是:
public voiddrawRect(float left, float top, float right, float bottom,Paint paint)
說明:繪制一個矩型。需要注明的是繪制矩形的參數和Java中的方法不一樣。
該方法的參數圖解說明如下:
那麼,矩形的高 height = bottom - right
矩形的寬 width = right – left
PS :假如drawRect的參數有誤,比如right < left ,Android是不會給我們檢查的,也不會提示相應的錯誤信息,
但它會繪畫出一個高或寬很小的矩形,可能不是你希望的。
public voidtranslate(float dx, float dy)
說明:在當前的坐標上平移(x,y)個像素單位
若dx <0 ,沿x軸向上平移; dx >0 沿x軸向下平移
若dy <0 ,沿y軸向上平移; dy >0 沿y軸向下平移
public void rotate(float degrees)
說明:旋轉一定的角度繪制圖像。
PS :從截圖上看,圖像是確實旋轉了,但是我找不到旋轉的依據中心。
下面給出該Demo的截圖,可以更改一些參數後自己觀察效果。