1. 程式人生 > >Canvas、Paint、TextPaint、StaticLayout

Canvas、Paint、TextPaint、StaticLayout

一、Canvas

android.graphics.Canvas

要畫東西,需要四個基本部件:1、一個儲存畫素的點陣圖;2、一個來承載繪圖呼叫(寫入點陣圖)的Canvas;3、繪圖基元(例如Rect,Path,文字,點陣圖);
4、畫筆


內部類:
Canvas.EdgeType、Canvas.VertexMode  兩個列舉類


構造方法:
Canvas()
Canvas(Bitmap bitmap)


方法:
drawARGB(int a, int r, int g, int b)
使用srcover porterduff模式,用指定的ARGB顏色填充整個畫布的點陣圖(僅限於當前剪輯)。


drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
繪製指定的弧,該弧將被縮放以適合指定的橢圓內。


drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
繪製指定的弧,該弧將被縮放以適合指定的橢圓內。


drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
使用指定的矩陣繪製點陣圖


drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
繪製指定的點陣圖,自動縮放/翻譯以填充目標矩形。


drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
繪製指定的點陣圖,自動縮放/翻譯以填充目標矩形。


drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
使用由當前矩陣轉換的指定顏料繪製指定的點陣圖,其頂部/左側角在(x,y)處。


drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)
通過網格繪製點陣圖,其中網格頂點均勻分佈在點陣圖中。


drawCircle(float cx, float cy, float radius, Paint paint)
通過指定的畫筆畫圓


drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
通過指定的畫筆繪製一條具有指定的起點和終點的線段。


drawLines(float[] pts, int offset, int count, Paint paint)
繪製一組線段


drawOval(RectF oval, Paint paint)
畫橢圓


drawOval(float left, float top, float right, float bottom, Paint paint)
畫橢圓


drawPath(Path path, Paint paint)
畫路徑


drawPicture(Picture picture, RectF dst)
繪製圖片,拉伸以適合dst矩形。


drawPicture(Picture picture)
儲存畫布狀態,繪製圖片並恢復畫布狀態。


drawPoint(float x, float y, Paint paint)
畫單個點


drawPoints(float[] pts, int offset, int count, Paint paint)
畫一組點


drawPoints(float[] pts, Paint paint)
畫一組點


drawRect(float left, float top, float right, float bottom, Paint paint)
畫矩形


drawRect(Rect r, Paint paint)
畫矩形


drawRect(RectF rect, Paint paint)
畫矩形


drawRoundRect(RectF rect, float rx, float ry, Paint paint)
通過指定的畫筆繪製指定的圓角


drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint)
通過指定的畫筆繪製指定的圓角


drawText(String text, float x, float y, Paint paint)
畫文字(寫字)


drawText(CharSequence text, int start, int end, float x, float y, Paint paint)
繪製指定範圍的文字,由start / end指定,其原點位於(x,y)指定的Paint中。


drawText(char[] text, int index, int count, float x, float y, Paint paint)
畫文字(寫字)


drawText(String text, int start, int end, float x, float y, Paint paint)
畫文字(寫字)


drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
沿著指定的路徑使用指定的繪圖繪製文字,原點位於(x,y)處


drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)
沿著指定的路徑使用指定的繪圖繪製文字,原點位於(x,y)處


drawTextRun(CharSequence text, int start, int end, int contextStart, int contextEnd, float x, float y, boolean isRtl, Paint paint)
在單一方向上繪製一段文字,並帶有用於複雜文字整形的可選上下文


drawTextRun(char[] text, int index, int count, int contextIndex, int contextCount, float x, float y, boolean isRtl, Paint paint)
在單一方向上繪製一段文字,並帶有用於複雜文字整形的可選上下文


drawVertices(Canvas.VertexMode mode, int vertexCount, float[] verts, int vertOffset, float[] texs, int texOffset, int[] colors, int colorOffset, short[] indices, int indexOffset, int indexCount, Paint paint)
繪製頂點陣列,解釋為三角形(基於模式)


getDensity()
獲取畫布的目標密度


getHeight()
返回當前繪圖圖層的高度


getWidth()
返回當前繪圖圖層的寬度


getMaximumBitmapHeight()
返回使用此畫布繪製的點陣圖的最大允許高度


getMaximumBitmapWidth()
返回使用此畫布繪製的點陣圖的最大允許寬度


isHardwareAccelerated()
指示此canvas是否使用硬體加速


restore()
此呼叫將先前呼叫save(),並用於移除自上次儲存呼叫以來對矩陣/剪輯狀態的所有修改


restoreToCount(int saveCount)
有效的方式來彈出任何呼叫save()之後發生的儲存計數達到saveCount


rotate(float degrees)
用指定的旋轉預先縮放當前矩陣


rotate(float degrees, float px, float py)
用指定的旋轉預先縮放當前矩陣  最終方法


save()
儲存當前矩陣並剪輯到私有堆疊上


saveLayer(RectF bounds, Paint paint)
它的行為與save()相同,但是它還分配並將圖形重定向到螢幕外渲染目標


saveLayer(float left, float top, float right, float bottom, Paint paint)
它的行為與save()相同,但是它還分配並將圖形重定向到螢幕外渲染目標


scale(float sx, float sy)
用指定的比例預先縮放當前矩陣


scale(float sx, float sy, float px, float py)
用指定的比例預先縮放當前矩陣  最終方法


setBitmap(Bitmap bitmap)
設定指定點陣圖


setDensity(int density)
指定此Canvas的支援點陣圖的密度


setMatrix(Matrix matrix)
用指定矩陣完全替換當前矩陣


skew(float sx, float sy)
用指定的偏斜對當前矩陣進行預先掃描


translate(float dx, float dy)

用指定的轉換對當前矩陣進行預處理

二、Paint

android.graphics.Paint

Paint類儲存關於如何繪製幾何圖形,文字和點陣圖的樣式和顏色資訊


構造方法:
Paint()
用預設的設定構造一個畫筆


Paint(int flags)
用指定標誌構造一個畫筆


Paint(Paint paint)
構造一個畫筆,並用paint引數的屬性初始化該畫筆的屬性


方法:
reset()
重置畫筆至預設設定


setColor(int color)
設定畫筆的顏色


setARGB(int a, int r, int g, int b)
作為setColor(int color)的補充


setAlpha(int a)
設定alpha值


setAntiAlias(boolean aa)
設定是否抗鋸齒


setColorFilter(ColorFilter filter)
設定或清除塗料的顏色過濾器,返回引數


setDither(boolean dither)
用於setFlags()的幫助器,設定或清除DITHER_FLAG位抖動影響比裝置更高精度的顏色如何下采樣


setHinting(int mode)
設定畫筆的提示模式


setStyle(Paint.Style style)
設定樣式


setTextSize(float textSize)

設定畫筆的字型大小

三、TextPaint

android.graphics.Paint
    android.text.TextPaint
Paint的子類
TextPaint是Paint的一個擴充套件,為文字測量和繪圖時使用的一些額外資料留下空間。

四、StaticLayout

Layout的子類

這由小部件用來控制文字佈局。 除非您正在實現自己的視窗小部件或自定義顯示物件,否則您不需要直接使用此類,或者試圖直接呼叫Canvas.drawText()

五、

使用Canvas畫字元時,常常遇到字元很長,不會換行的問題。
解決辦法如下:
1、使用TextPaint,而不是Paint。
2、不使用canvas的drawText方法。
3、使用StaticLayout。