對於簡單的封閉圖形(路徑無相交的現象),圖形的外部和內部和容易判斷,但如果路徑有相交的情況,對應重疊的部分,使用不同的填充模式,內部和外部的定義有所不同。填充模式可以分為兩類:
EVEN_ODD 意味着如果用一條直線橫貫圖形時,外部和內部交替出現。
WINDING 對應一條曲線C和指定點P,創建一條由P出發的任意方向無限延伸的直線。找到曲線C和這條直線的所有交點。計算所有由順時針方向和曲線相交的交點的個數,再計算由逆時針方向和曲線相交的個數,如果兩個數相等,表示這個點在曲線內部,如果不等,表示這個點在曲線外部。

Android的Path.FillType除了支持上面兩種模式外,還支持了上面兩種模式的反模式,一共定義了EVEN_ODD, INVERSE_EVEN_ODD, WINDING, INVERSE_WINDING 四種模式。
本例的基本圖形為兩個相交的圓,使用了上述四種模式來填充圖形:
showPath(canvas, 0, 0, Path.FillType.WINDING, paint); showPath(canvas, 160, 0, Path.FillType.EVEN_ODD, paint); showPath(canvas, 0, 160, Path.FillType.INVERSE_WINDING, paint); showPath(canvas, 160, 160, Path.FillType.INVERSE_EVEN_ODD, paint);

