1、Path.setFillType()用法
這個方法用來判斷圖形的某個點是屬於外部還是內部
Path添加的圖形是帶有方向的 ,比如下面path添加一個圓形;
Path.addCircle(getWidth() / 2, getHeight() / 2 + 150, 150, Path.Direction.CCW);
第四個參數代表的是圖形的方向,有兩個Path.Direction.CW(順時針)和Path.Direction.CCW(逆時針)
上面的方法setFillType()就是根據圖形的方向來判斷圖像某一個點是屬於外部還是內部的
這個方法setFillType()中可以傳遞四種類型的數值
1,Path.FillType.WINDING
一條射線向外發射,與圖像會有交點,考慮方向,相反方向相減,相同方向相加,最後結果大於0就是內部,否則就是外部; 下面我使用path.添加了兩個逆時針放向的圓形,它們有重疊部分,使用path.setFillType(Path.FillType.WINDING);之後判斷圖形中的每個點是在外部還是內部
2,Path.FillType.EVEN_ODD
一條射線向外發射,與圖像會有交點, 不考慮方向,單數是內部,偶數是外部;適用於做鏤空效果
3,Path.FillType.INVERSE_WINDING(含義和Path.FillType.WINDING相反)
4,Path.FillType.INVERSE_EVEN_ODD(含義和Path.FillType.EVEN_ODD相反)
2,Canvas.drawArc
userCenter:true 畫出的結果是扇形;false畫出的結果是弧形;
3,Math.toRadians()是把數值轉換成角度
(Math.cos(Math.toRadians(mark(5.0f))))
4,PathMeasure用於畫出測量的路徑的長度
path.addRect(new RectF(getWidth() / 2 - 150, getHeight() / 2 - 150, getWidth() / 2 + 150, getHeight() / 2 + 150), Path.Direction.CW);
path.addCircle(getWidth() / 2, getHeight() / 2 + 150, 150, Path.Direction.CW);
pathMeasure.setPath(path, false);
float length = pathMeasure.getLength();//第一段路徑
Log.e("1234", "------------length: " + length);
//獲取下一個路徑,有可能沒有多個路徑了,返回false
boolean nextContour = pathMeasure.nextContour();
Log.e("1234", "------------nextContour: " + nextContour);
float length2 = pathMeasure.getLength();
Log.e("1234", "------------length: " + length2);