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);