• 一起Talk Android吧(第四百一十回:绘制曲线)



    各位看官们,大家好,上一回中咱们说的例子是"绘制不规则图形",这一回咱们介绍的例子是" 绘制曲线"。闲话休提,言归正转,让我们一起Talk Android吧!

    看官们,我们在前面章回中介绍了如何绘制直线,绘制方法有两种:

    • 直接使用画布的drawLine()方法;
    • 在路径中添加关键点再通过路径画直线;

    本章回中主要介绍如何绘制曲线。绘制曲线的整体思路和通过路径绘制直线的思路相同,只是我们修改了路径的效果,进而达到曲线效果,修改路径效果使用的是setPathEffect()方法。通过修改路径效果还可以实现虚线,接下来我们分别介绍具体的实现步骤。

    画曲线

    整体思路:在路径中添加关键点,然后修改路径的效果,最后通过路径绘制曲线。修改路径效果使用的是setPathEffect()方法。给该方法传递一个圆角效果的参数就可以达到绘制曲线的效果,注意,如果两个点在同一方向上,则效果仍然为直线。下面是一个正弦波的示例,请大家参考:

    //画一个正弦波形
    path.moveTo(100,400);
    path.lineTo(100+40,400-100);
    path.lineTo(100+40+40,400-100+100);
    path.lineTo(100+40+40+40,400-100+100+100);
    path.lineTo(100+40+40+40+40,400-100+100+100-100);
    
    //使用路径的圆角效果来画曲线,类的参数为圆角的半径,半径越大圆角的弧形越明显
    PathEffect effect = new CornerPathEffect(200);
    mArcPaint.setPathEffect(effect);
    canvas.drawPath(path,mArcPaint);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    画虚线

    画虚线和画曲线的方法完全相同,不同点在于使用了不同的路径效果,具体的示例代码如下:

    //第1,2,3个虚线的长度依次为5,10,5,第二个参数是虚线距离起点的偏移值
    PathEffect effect = new DashPathEffect(new float[]{10,5,20,10,10,5},0);
    mArcPaint.setPathEffect(effect);
    canvas.drawPath(path,mArcPaint);
    
    • 1
    • 2
    • 3
    • 4

    把此效果替换到任意的直线路径中就会得到一个虚线。此外,此效果中可以控制实线和虚线的长度,进面得到间隔不同的虚线.

    路径效果组合

    我们还可以把路径进行组合得到复合的效果,下面的代码显示了如何绘制一个虚线形式的正弦波

    //使用路径的圆角效果来画曲线,类的参数为圆角的半径,半径越大圆角的弧形越明显
    PathEffect effect1 = new CornerPathEffect(200);
    //使用路径的虚线效果来画虚线,类的第一个参数为虚线中的室实线和长度,比如示例代码中第1,2,3个实线的长度依次为10,20,10,
    //第1,2,3个虚线的长度依次为5,10,5,第二个参数是虚线距离起点的偏移值
    PathEffect effect2 = new DashPathEffect(new float[]{10,5,20,10,10,5},0);
    
    //使用路径组合,效果是生成一个虚线的正弦波形,注意这两个效果有先后顺序,调整顺序后就达不到组合效果了
    PathEffect effect = new ComposePathEffect(effect2,effect1);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    看官们,关于Android中"绘制曲线"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

  • 相关阅读:
    RT-Thread 双向链表(学习笔记)
    Vue(九)——页面路由(1)
    4 . DWD和ADS层
    Spring 框架 、注解开发(二)
    第六章-项目进度管理
    ideal 同一项目启动多实列
    C/C++导航系统
    SaaSBase:什么是SaleSmartly?
    A Simple, Fast and Effective Polygon Reduction Algorithm 代码 vscode编译过程
    【算法优选】 前缀和专题——壹
  • 原文地址:https://blog.csdn.net/talk_8/article/details/127781582