Board logo

标题: Android Canvas之Path操作(6) [打印本页]

作者: look_w    时间: 2019-2-19 16:34     标题: Android Canvas之Path操作(6)

绘制圆弧:

    //绘制圆弧
    addArc(RectF oval, float startAngle, float sweepAngle)
    addArc(float left, float top, float right, float bottom, float startAngle,float sweepAngle)
     
    //forceMoveTo:是否强制将path最后一个点移动到圆弧起点,
    //true是强制移动,即为不连接两个点;false则连接两个点
    arcTo(RectF oval, float startAngle, float sweepAngle,boolean forceMoveTo)
    arcTo(RectF oval, float startAngle, float sweepAngle)
    arcTo(float left, float top, float right, float bottom, float startAngle,float sweepAngle, boolean forceMoveTo)

addArc和arcTo都是添加圆弧到path中,不过他们之间还是有区别的:addArc是直接添加圆弧到path中,而arcTo会判断要绘制圆弧的起点与绘制圆弧之前path中最后的点是否是同一个点,如果不是同一个点的话,就会连接两个点。
示例:

    //在(400, 200, 600, 400)区域内绘制一个300度的圆弧
    RectF rectF = new RectF(400, 200, 600, 400);
    path.addArc(rectF, 0, 300);
    //在(400, 600, 600, 800)区域内绘制一个90度的圆弧,并且不连接两个点
    RectF rectFTo = new RectF(400, 600, 600, 800);
    path.arcTo(rectFTo, 0, 90, true);
    //等价于path.addArc(rectFTo, 0, 90);
    canvas.drawPath(path, paint);

效果图:

修改一下代码:

    //在(400, 200, 600, 400)区域内绘制一个300度的圆弧
    RectF rectF = new RectF(400, 200, 600, 400);
    path.addArc(rectF, 0, 300);
    //在(400, 600, 600, 800)区域内绘制一个90度的圆弧,并且连接两个点
    RectF rectFTo = new RectF(400, 600, 600, 800);
    path.arcTo(rectFTo, 0, 90,false);
    //等价于path.arcTo(rectFTo, 0, 90);
    canvas.drawPath(path, paint);

对比发现我们只是将arcTo最后一个参数变成了false,即连接绘制圆弧之前path的最后一个点和绘制圆弧的起点,效果图:





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0