Android中View的绘制一

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);之后判断图形中的每个点是在外部还是内部
Android中View的绘制一_第1张图片Android中View的绘制一_第2张图片

2,Path.FillType.EVEN_ODD
一条射线向外发射,与图像会有交点, 不考虑方向,单数是内部,偶数是外部;适用于做镂空效果
Android中View的绘制一_第3张图片
3,Path.FillType.INVERSE_WINDING(含义和Path.FillType.WINDING相反)

4,Path.FillType.INVERSE_EVEN_ODD(含义和Path.FillType.EVEN_ODD相反)

2,Canvas.drawArc
userCenter:true 画出的结果是扇形;false画出的结果是弧形;
Android中View的绘制一_第4张图片Android中View的绘制一_第5张图片
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);

你可能感兴趣的:(Android中View的绘制一)