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 把兩個其他方法加起來,和上面類似,差別不好描述。。。