1. 程式人生 > >canvas相關(漸變、陰影、path)

canvas相關(漸變、陰影、path)

1、setShader

Paint物件的setShader函式,我的感覺是設定一種方式來填充圖形。

可以設定為漸變,程式碼如下:

Paint paint=new Paint();  //定義一個Paint
Shader mShader = new LinearGradient(0,0,40,60,new int[] {Color.RED,Color.GREEN,Color.BLUE},null,Shader.TileMode.REPEAT);  
//新建一個線性漸變,前兩個引數是漸變開始的點座標,第三四個引數是漸變結束的點的座標。連線這2個點就拉出一條漸變線了,玩過PS的都懂。然後那個陣列是漸變的顏色。下一個引數是漸變顏色的分佈,如果為空,每個顏色就是均勻分佈的。最後是模式,這裡設定的是迴圈漸變

paint.setShader(mShader);

Shader可以有以下幾種:

bitmapShader         點陣圖平鋪

linearGradient         線性漸變

radialGradient         圓形漸變

sweepGradient       角度漸變

composeShader    組合效果(組合以上幾種)


2、setShadowLayer

設定了這個之後,再畫出來的圖形後面,會有一個陰影

paint.setShaderLayer(15,10,10,Color.GRAY);  //第一個引數是陰影擴散半徑,緊接著的2個引數是陰影在X和Y方向的偏移量,最後一個引數是顏色

但是這裡有個問題,在畫bitmap的時候,如果設定了shadowLayer,畫出來的圖形並不會有陰影,而是2個bitmap疊加在一起。也就是說,他的陰影層也和他本身一樣。根據分析,因該是bitmap也被設定成了陰影層。暫時還沒找到比較好的在圖下面新增陰影的辦法。

3、Path的6種效果

CornerPathEffect              在路徑的轉折處是圓角,構造引數為圓角半徑

DiscretePathEffect           不規則的鋸齒線(類似心電圖)

構造引數:

    第一個是小三角的開口寬度(心電圖每個波之間的寬度)

    一個是偏移量(心電圖高度)

DashPathEffect                 虛線

構造引數:

    第一個是一個數組,陣列長度必須>=2,陣列的值定義了寬度,比如 {20,10,5,10},意思就是第一個實線段長20,他後面的空白長10,然後又是一個長5的實線段,然後是長度10的空白。

    第二個引數說是偏移量,沒發現具體作用

PathDashPathEffect        類似上面一個,不過是由path圖形組成的線段(如由三角形組成的線段,正方形組成的線段)。

構造引數:

    第一個引數是一個path,由他定義圖形。

    第二個是間距

    第三個和上面一樣   

    第四個是變換方式,有PathDashPathEffect.Style.TRANSLATE,ROTATE,MORPH三種。第一個就是直接把圖形擺出路徑,第二個會依據路徑旋轉,第三個是依據路徑自動變形

ComposePathEffect       把兩個上面其他的方式組合起來

構造引數:

    第一個是一個effect

    第二個還是一個effect

SumPathEffect                把兩個其他方法加起來,和上面類似,差別不好描述。。。