paint的屬性的設置,其實最終調用的是native方法,舉個栗子:canvas
咱們打開此方法能夠看到具體的實現以下:數組
public void setStrokeCap(Cap cap) {
nSetStrokeCap(mNativePaint, cap.nativeInt);
}複製代碼
咱們能夠看到裏面就調用了nSetStrokeCap()方法,這是一個native方法:bash
咱們再來看看setStrokeCap(Cap cap) 中的Cap參數,這個參數有三種類型:BUTT(默認類型)、ROUND(圓角效果)、SQUARE(方角效果),當我沒畫一條直線時,這裏經過一張圖片能夠很直白的提現這幾種類型的差異:ide
這個方法是設置畫筆的拐角風格,這裏有三種類型MITER(尖角:默認類型)、ROUND(圓角)、BEVEL(鈍角)三種狀態,一樣咱們能夠用一張圖來描述這三種類型的區別:字體
下圖介紹的是FontMetrics的集中經常使用的屬性:ui
下面講講使用的Shader的幾個子類:spa
構造方法1:3d
LinearGradient(float x0, float y0, float x1, float y1,int color0,int color1,TileMode tile)複製代碼
參數說明:x0,y0,x1,y1:漸變的兩個端點的位置; color0、color1:兩個端點的顏色,tile:端點範圍以外的着色規則,類型是TileMode.code
咱們經過如下代碼實現這個構造方法:cdn
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mShader = new LinearGradient(0, 0, 500, 500, Color.RED, Color.BLUE, Shader.TileMode.CLAMP);
mPaint.setShader(mShader);
canvas.drawRect(0, 0, 500, 500, mPaint);
}複製代碼
運行效果:
構造方法2:
LinearGradient(float x0, float y0, float x1, float y1, int colors[],float positions[], TileMode tile)複製代碼
參數說明:x0,y0,x1,y1:漸變的兩個端點的位置; colors:端點顏色的數組,position[]:能夠爲null,例如position[]數組爲{0.5, 1};colors[]數組爲{Color.RED, Color.BLUE},第一個值0.5表示整個線性渲染的比例到50%,這50%的顏色爲colors[]數組中的第一個顏色值Color.RED,1對應colors數組中的第二個值Color.BLUE,表示當渲染比例到了100%的時候顏色爲Color.BLUE。這裏主要若是positions[]不爲null的時候,positions[]數組的長度要與colors[]數組長度相等,不然會拋出異常。tile:端點範圍以外的着色規則,類型是TileMode.
咱們經過如下代碼使用這個構造方法:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mShader = new LinearGradient(0, 0, 500, 500,
new int[]{Color.RED, Color.BLUE, Color.GREEN},
new float[]{0f, 0.5f, 1f}, Shader.TileMode.CLAMP);
mPaint.setShader(mShader);
canvas.drawRect(0, 0, 500, 500, mPaint);
}複製代碼
效果以下:
因而可知:0~0.5是Color.RED~Color.BLUE之間的漸變,0.5~1是Color.BLUE~Color.RED之間的漸變。