Android 畫圖常用類
Android利用canvas畫各種圖形(點、直線、弧、圓、橢圓、文字、矩形、多邊形、曲線、圓角矩形), 1、首先說一下canvas類:
Class Overview
The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).
這個類相當於一個畫布,你可以在裏面畫很多東西;
我們可以把這個Canvas理解成系統提供給我們的一塊內存區域(但實際上它只是一套畫圖的API,真正的內存是下面的Bitmap),而且它還提供了一整套對這個內存區域進行操作的方法,所有的這些操作都是畫圖API。也就是說在這種方式下我們已經能一筆一劃或者使用Graphic來畫我們所需要的東西了,要畫什麼要顯示什麼都由我們自己控制。
這種方式根據環境還分爲兩種:一種就是使用普通View的canvas畫圖,還有一種就是使用專門的SurfaceView的canvas來畫圖。兩種的主要是區別就是可以在SurfaceView中定義一個專門的線程來完成畫圖工作,應用程序不需要等待View的刷圖,提高性能。前面一種適合處理量比較小,幀率比較小的動畫,比如說象棋遊戲之類的;而後一種主要用在遊戲,高品質動畫方面的畫圖。
下面是Canvas類常用的方法:
drawRect(RectF rect, Paint paint) //繪製區域,參數一爲RectF一個區域
drawPath(Path path, Paint paint) //繪製一個路徑,參數一爲Path路徑對象
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) //貼圖,參數一就是我們常規的Bitmap對象,參數二是源區域(這裏是bitmap),參數三是目標區域(應該在canvas的位置和大小),參數四是Paint畫刷對象,因爲用到了縮放和拉伸的可能,當原始Rect不等於目標Rect時性能將會有大幅損失。
drawLine(float startX, float startY, float stopX, float stopY, Paintpaint) //畫線,參數一起始點的x軸位置,參數二起始點的y軸位置,參數三終點的x軸水平位置,參數四y軸垂直位置,最後一個參數爲Paint 畫刷對象。
drawPoint(float x, float y, Paint paint) //畫點,參數一水平x軸,參數二垂直y軸,第三個參數爲Paint對象。
drawText(String text, float x, floaty, Paint paint) //渲染文本,Canvas類除了上面的還可以描繪文字,參數一是String類型的文本,參數二x軸,參數三y軸,參數四是Paint對象。
drawOval(RectF oval, Paint paint)//畫橢圓,參數一是掃描區域,參數二爲paint對象;
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)//畫弧,
參數一是RectF對象,一個矩形區域橢圓形的界限用於定義在形狀、大小、電弧,參數二是起始角(度)在電弧的開始,
參數三掃描角(度)開始順時針測量的,參數四是如果這是真的話,包括橢圓中心的電弧,並關閉它,如果它是假這將是一個弧線,參數五是Paint對象;
還要理解一個paint類:
Class Overview
The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
paint類擁有風格和顏色信息如何繪製幾何學,文本和位圖。Paint 代表了Canvas上的畫筆、畫刷、顏料等等;
Paint類常用方法:
setARGB(int a, int r, int g, int b) // 設置 Paint對象顏色,參數一爲alpha透明值
setAlpha(int a) // 設置alpha不透明度,範圍爲0~255
setAntiAlias(boolean aa) // 是否抗鋸齒
setColor(int color) // 設置顏色,這裏Android內部定義的有Color類包含了一些常見顏色定義
setTextScaleX(float scaleX) // 設置文本縮放倍數,1.0f爲原始
setTextSize(float textSize) // 設置字體大小
setUnderlineText(booleanunderlineText) // 設置下劃線
Bitmap.createBitmap函數有6個重載方法
- public static Bitmap createBitmap
(Bitmap src)
從原位圖src複製出一個新的位圖,和原始位圖相同 - public static Bitmap createBitmap
(int[] colors, int width, int height, Bitmap.Config config)
這個函數根據顏色數組來創建位圖,注意:顏色數組的長度>=width*height
此函數創建位圖的過程可以簡單概括爲爲:更加width和height創建空位圖,然後用指定的顏色數組colors來從左到右從上至下一次填充顏色。config是一個枚舉,可以用它來指定位圖“質量”。 - public static Bitmap createBitmap
(int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
此方法與2類似,但我還不明白offset和stride的作用。 - public static Bitmap createBitmap
(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
從原始位圖剪切圖像,這是一種高級的方式。可以用Matrix(矩陣)來實現旋轉等高級方式截圖
參數說明:
Bitmap source:要從中截圖的原始位圖
int x:起始x座標
int y:起始y座標
int width:要截的圖的寬度
int height:要截的圖的寬度
Bitmap.Config config:一個枚舉類型的配置,可以定義截到的新位圖的質量
返回值:返回一個剪切好的Bitmap - public static Bitmap createBitmap
(int width, int height, Bitmap.Config config)
根據參數創建新位圖 - public static Bitmap createBitmap
(Bitmap source, int x, int y, int width, int height)
簡單的剪切圖像的方法,可以參考上面的4.