Android Path.FillType属性

FillType从名称上看就是填充类型,FillType是Path内部的枚举,所以指的是Path的填充类型。通常我们使用

1
canvas.drawPath(path, paint);

填充或者描边路径,而FillType就是填充或者描边的规则。

FillType有4种取值WINDING, EVEN_ODD, INVERSE_WINDING, INVERSE_EVEN_ODD,默认为WINDING

先看一张截图,前两列表示WINDINGEVEN_ODD类型的效果,后面四列分别为INVERSE_WINDINGINVERSE_EVEN_ODD的填充和描边效果。

https://static.kyleduo.com/blog/image/path_filltype_screenshot_2.png

对上面的效果进行解释:

  • WINDING:以Path的最外层闭合图形为准,填充内部所有区域;描边所有Path
  • EVEN_ODD:对于path包含的每一层闭合图形,由内向外从1开始标记,单数闭合图形内部进行填充;描边所有Path
  • INVERSE_WINDING:和WINDING相反,填充剩余区域。描边见(1)
  • INVERSE_EVEN_ODD:和EVEN_ODD相反,填充剩余区域。描边见(1)

(1): 对INVERSE_开头的两种类型的描边处理,也和名称一样,取反后进行描边。

你也许会注意到,带有INVERSE_开头的填充类型,绘制时会在最外层再加一层边框,边框宽度就是Paint的strokeWidth,并且不会小于1像素。