• path绘制


    drawPath(Path path, Paint paint) 画自定义图形

    drawPath(path) 这个方法是通过描述路径的方式来绘制图形的,它的 path 参数就是用来描述图形路径的对象

    Path 可以描述直线、二次曲线、三次曲线、圆、椭圆、弧形、矩形、圆角矩形。

    把这些图形结合起来,就可以描述出很多复杂的图形。

    Path有两类方法,一类是直接描述路径的,另一类是辅助的设置或计算

    Path 方法第一类:直接描述路径

    这一类方法还可以细分为两组:添加子图形和画线(直线或曲线)

    第一组: addXxx() ——添加子图形

    addCircle(float x, float y, float radius, Direction dir) 添加圆
    addOval(float left, float top, float right, float bottom, Direction dir) / addOval(RectF oval, Direction dir) 添加椭圆
    addRect(float left, float top, float right, float bottom, Direction dir) / addRect(RectF rect, Direction dir) 添加矩形
    //添加圆角矩形
    addRoundRect(RectF rect, float rx, float ry, Direction dir) 
    addRoundRect(float left, float top, float right, float bottom, float rx, float ry, Direction dir) 
    addRoundRect(RectF rect, float[] radii, Direction dir) 
    addRoundRect(float left, float top, float right, float bottom, float[] radii, Direction dir)
    addPath(Path path) 添加另一个 Path
    

      

    第二组:xxxTo() ——画线(直线或曲线)

    // 画直线
    lineTo(float x, float y) 
    rLineTo(float x, float y) 
    

    当前位置向目标位置画一条直线, x 和 y 是目标位置的坐标 

    lineTo(x, y) 的参数是绝对坐标,而 rLineTo(x, y) 的参数是相对当前位置的相对坐标(前缀 r 指的就是 relatively) 

    //  画二次贝塞尔曲线
    quadTo(float x1, float y1, float x2, float y2) 
    rQuadTo(float dx1, float dy1, float dx2, float dy2)
    
    // 画三次贝塞尔曲线
    cubicTo(float x1, float y1, float x2, float y2, float x3, float y3) 
    rCubicTo(float x1, float y1, float x2, float y2, float x3, float y3) 
    

     

    // 移动到目标位置
    moveTo(float x, float y) 
    rMoveTo(float x, float y) 
    

      

    第二组还有两个特殊的方法: arcTo() 和 addArc()。它们也是用来画线的,但并不使用当前位置作为弧线的起点。

    //  画弧形
    arcTo(RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo) arcTo(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean forceMoveTo) 
    arcTo(RectF oval, float startAngle, float sweepAngle)
    

      

    这个方法和 Canvas.drawArc() 比起来,少了一个参数 useCenter,而多了一个参数 forceMoveTo

    少了 useCenter ,是因为 arcTo() 只用来画弧形而不画扇形,所以不再需要 useCenter 参数;

    而多出来的这个 forceMoveTo 参数的意思是,绘制是要「抬一下笔移动过去」,还是「直接拖着笔过去」,区别在于是否留下移动的痕迹。

    (如果画完一条线之后再画另一条线,而两条线时隔开的话,forceMoveTo为true,就会将笔拖着过去,也就是这两条线还是会连起来。)

    addArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle) 
    addArc(RectF oval, float startAngle, float sweepAngle)
    

     addArc()只是一个直接使用了 forceMoveTo = true 的简化版 arcTo() 

    close() 封闭当前子图形
    

      

    Path 方法第二类:辅助的设置或计算

        Path.setFillType(Path.FillType ft) 设置填充方式

    FillType 的取值有四个:

    • EVEN_ODD (奇偶原则)
    • WINDING (默认值)(非零环绕数原则)
    • INVERSE_EVEN_ODD
    • INVERSE_WINDING
    EVEN_ODD 和 WINDING 的原理
    EVEN_ODD(奇偶原则  even_odd rule)

    非零环绕数规则和奇-偶规则(Non-Zero Winding Number Rule&&Odd-even Rule)

     

     

     

      

  • 相关阅读:
    NOI2013
    【FINAL】NOI
    【jsoi】第一季 [略]精简题解
    浏览器缓存机制--小总结
    UC和QQ两个主流浏览器 * 点击触发微信分享到朋友圈或发送给朋友的功能(转载)
    webpack加载postcss,以及autoprefixer的loader
    HTTP协议中的短轮询、长轮询、长连接和短连接,看到一篇文章有感
    webpack2.0 css文件引入错误解决及图片输出在根目录配置问题
    webpack+vue 我的视角(持续更新)
    手机端图像编辑上传-cropper
  • 原文地址:https://www.cnblogs.com/huyang011/p/9553647.html
Copyright © 2020-2023  润新知