HenCoder:https://zhuanlan.zhihu.com/hencoder
Paint的Shader設置
LinearGradient:線性,Shader.TileMode.CLAMP,MIRROR,REPEAT
RadialGradient:輻射漸變
BitmapShader
ComposeShader:混合著色器
Paint#setStrokeCap(Paint.Cap cap)
BUTT 平頭、ROUND 圓頭、SQUARE 方頭
可以用來畫點
Paint#setStrokeJoin(Paint.Join join)
設置拐角的形狀。有三個值可以選擇:MITER 尖角、 BEVEL 平角和 ROUND 圓角
Paint#setStrokeMiter(float miter)
設置 MITER 型拐角的延長線的最大值
在放大繪制 Bitmap 的時候就會使用雙線性過濾了
paint.setFilterBitmap(true);
setPathEffect(PathEffect effect)
CornerPathEffect:把所有拐角變成圓角,參數 radius 是圓角的半徑
DiscretePathEffect:把線條進行隨機的偏離,讓輪廓變得亂七八糟。亂七八糟的方式和程度由參數決定。segmentLength 是用來拼接的每個線段的長度, deviation 是偏離量
DashPathEffect:使用虛線來繪制線條
PathDashPathEffect(Path shape, float advance, float phase, PathDashPathEffect.Style style):比 DashPathEffect 多一個前綴 Path ,所以顧名思義,它是使用一個 Path 來繪制「虛線」,PathDashPathEffect.Style ,是一個 enum ,具體有三個值:TRANSLATE:位移,ROTATE:旋轉,MORPH:變體
SumPathEffect:組合效果類的 PathEffect 。它的行為特別簡單,就是分別按照兩種 PathEffect分別對目標進行繪制。
ComposePathEffect:這也是一個組合效果類的 PathEffect 。不過它是先對目標 Path 使用一個 PathEffect,然后再對這個改變后的 Path 使用另一個 PathEffect。
注意: PathEffect 在有些情況下不支持硬件加速,需要關閉硬件加速才能正常使用:
1.Canvas.drawLine() 和 Canvas.drawLines() 方法畫直線時,setPathEffect()是不支持硬件加速的;
2.PathDashPathEffect 對硬件加速的支持也有問題,所以當使用 PathDashPathEffect 的時候,最好也把硬件加速關了。
setShadowLayer(float radius, float dx, float dy, int shadowColor)
radius 是陰影的模糊范圍; dx dy 是陰影的偏移量; shadowColor 是陰影的顏色。
如果要清除陰影層,使用 clearShadowLayer() 。
注意:
在硬件加速開啟的情況下, setShadowLayer() 只支持文字的繪制,文字之外的繪制必須關閉硬件加速才能正常繪制陰影。
如果 shadowColor 是半透明的,陰影的透明度就使用 shadowColor 自己的透明度;而如果 shadowColor 是不透明的,陰影的透明度就使用 paint 的透明度。
setMaskFilter(MaskFilter maskfilter)
MaskFilter 有兩種: BlurMaskFilter 和 EmbossMaskFilter。
BlurMaskFilter:
NORMAL: 內外都模糊繪制
SOLID: 內部正常繪制,外部模糊
INNER: 內部模糊,外部不繪制
OUTER: 內部不繪制,外部模糊(什么鬼?)
EmbossMaskFilter:
浮雕效果的 MaskFilter。
EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius)的參數里, direction 是一個 3 個元素的數組,指定了光源的方向; ambient 是環境光的強度,數值范圍是 0 到 1; specular 是炫光的系數; blurRadius 是應用光線的范圍。
setInterpolator(Interpolator interpolator)
https://zhuanlan.zhihu.com/p/29094369
自定義View
View繪制步驟
drawBackground()
onDraw()
dispatchDraw()
onDrawForeground()
設置原點端點形狀,圓頭 (ROUND)、平頭 (BUTT) 和方頭 (SQUARE) 三種
paint.setStrokeCap(Paint.Cap.SQUARE);