Android 畫圖常用類

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對象;

drawCircle(float cx, float cy, float radius,Paint paint)// 繪製圓,參數一是中心點的x軸,參數二是中心點的y軸,參數三是半徑,參數四是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個重載方法

  1. public static Bitmap createBitmap (Bitmap src)
    從原位圖src複製出一個新的位圖,和原始位圖相同

  2. public static Bitmap createBitmap (int[] colors, int width, int height, Bitmap.Config config) 
    這個函數根據顏色數組來創建位圖,注意:顏色數組的長度>=width*height

    此函數創建位圖的過程可以簡單概括爲爲:更加width和height創建空位圖,然後用指定的顏色數組colors來從左到右從上至下一次填充顏色。config是一個枚舉,可以用它來指定位圖“質量”。

  3. public static Bitmap createBitmap (int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
    此方法與2類似,但我還不明白offset和stride的作用。

  4. 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
  5. public static Bitmap createBitmap (int width, int height, Bitmap.Config config)
    根據參數創建新位圖

  6. public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height) 

    簡單的剪切圖像的方法,可以參考上面的4.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章