FillType从名称上看就是填充类型,FillType是Path内部的枚举,所以指的是Path的填充类型。通常我们使用1
canvas.drawPath(path, paint);
填充或者描边路径,而FillType就是填充或者描边的规则。
FillType有4种取值:WINDING
, EVEN_ODD
, INVERSE_WINDING
, INVERSE_EVEN_ODD
,默认为WINDING
。
先看一张截图,前两列表示WINDING
和EVEN_ODD
类型的效果,后面四列分别为INVERSE_WINDING
和INVERSE_EVEN_ODD
的填充和描边效果。
对上面的效果进行解释:
WINDING
:以Path的最外层闭合图形为准,填充内部所有区域;描边所有PathEVEN_ODD
:对于path包含的每一层闭合图形,由内向外从1开始标记,单数闭合图形内部进行填充;描边所有PathINVERSE_WINDING
:和WINDING
相反,填充剩余区域。描边见(1)INVERSE_EVEN_ODD
:和EVEN_ODD
相反,填充剩余区域。描边见(1)
(1): 对
INVERSE_
开头的两种类型的描边处理,也和名称一样,取反后进行描边。
你也许会注意到,带有INVERSE_
开头的填充类型,绘制时会在最外层再加一层边框,边框宽度就是Paint的strokeWidth
,并且不会小于1像素。