自定義View:Paint的常用屬性介紹及使用

talang發表於2019-03-26

paint的屬性的設定,其實最終呼叫的是native方法,舉個栗子:

1.paint.setStrokeCap(Cap cap);

我們開啟此方法可以看到具體的實現如下:

public void setStrokeCap(Cap cap) {
    nSetStrokeCap(mNativePaint, cap.nativeInt);
}複製程式碼

我們可以看到裡面就呼叫了nSetStrokeCap()方法,這是一個native方法:

自定義View:Paint的常用屬性介紹及使用

我們再來看看setStrokeCap(Cap cap) 中的Cap引數,這個引數有三種型別:BUTT(預設型別)、ROUND(圓角效果)、SQUARE(方角效果),當我沒畫一條直線時,這裡通過一張圖片可以很直白的提現這幾種型別的差別:

自定義View:Paint的常用屬性介紹及使用

2.paint.setStrokeJoin(Paint.Join.MITER); 

這個方法是設定畫筆的拐角風格,這裡有三種型別MITER(尖角:預設型別)、ROUND(圓角)、BEVEL(鈍角)三種狀態,同樣我們可以用一張圖來描述這三種型別的區別:

自定義View:Paint的常用屬性介紹及使用

3.paint.getFontMetrics():獲取字型度量物件FontMetrics

下圖介紹的是FontMetrics的集中常用的屬性:

自定義View:Paint的常用屬性介紹及使用

4.Paint顏色相關的屬性:

自定義View:Paint的常用屬性介紹及使用

下面講講使用的Shader的幾個子類:

自定義View:Paint的常用屬性介紹及使用

構造方法1:

LinearGradient(float x0, float y0, float x1, float y1,int color0,int color1,TileMode tile)複製程式碼

引數說明:x0,y0,x1,y1:漸變的兩個端點的位置; color0、color1:兩個端點的顏色,tile:端點範圍之外的著色規則,型別是TileMode.

我們通過以下程式碼實現這個構造方法:

@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);
}複製程式碼

執行效果:

自定義View:Paint的常用屬性介紹及使用


構造方法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之間的漸變。

自定義View:Paint的常用屬性介紹及使用


相關文章