返回顶部
首页 > 资讯 > 精选 >View绘图之Path怎么使用
  • 737
分享到

View绘图之Path怎么使用

2023-07-05 21:07:50 737人浏览 独家记忆
摘要

这篇文章主要讲解了“View绘图之Path怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“View绘图之Path怎么使用”吧!使用Path绘制线path类是一个非常有用的类,他可以预先

这篇文章主要讲解了“View绘图之Path怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“View绘图之Path怎么使用”吧!

    使用Path绘制线

    path类是一个非常有用的类,他可以预先在view上讲N个点连成一条“路径”,然后调用canvas的drawPath(path,paint)即可沿着路径绘制图形,并且Android还为路径提供了pathEffect来绘制效果,pathEffect包含了如下子类
    -ComposePathEffect
    -ComnerPathEffect
    -DashPathEffect
    -DiscretePathEffect
    -PathDashPathEffect
    -SunPathEffect

    一、我们这里绘制了7条线来分别介绍上面的几种子类都有什么用

    代码如下

    运行效果

    View绘图之Path怎么使用

    package tester.ermu.com.canvasdemo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.ComposePathEffect;import android.graphics.CornerPathEffect;import android.graphics.DashPathEffect;import android.graphics.DiscretePathEffect;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PathDashPathEffect;import android.graphics.PathEffect;import android.graphics.SumPathEffect;import android.util.AttributeSet;import android.view.View;public class PathText extends View {    private float phase;    //线条的集合,    PathEffect[] effects = new PathEffect[7];    int[] colors;    private Paint paint;    Path path;    public PathText(Context context, AttributeSet attrs) {        super(context, attrs);//----------------------第一步-------------------------------        //创建一个画笔对象,设置画笔类型和画笔的大小        paint = new Paint();        paint.setStyle(Paint.Style.STROKE);        paint.setStrokeWidth(8);//------------------------第二步-----------------------------                path = new Path();        path.moveTo(0, 0);//--------------------------第三步---------------------------                  for (int i = 1; i <= 50; i++)        {            path.lineTo(i * 20, (float) Math.random() *100);        }        // 初始化7个颜色        colors = new int[] { Color.BLACK, Color.BLUE, Color.CYAN,                Color.GREEN, Color.MAGENTA, Color.RED, Color.GRAY };    }    public PathText(Context context){        super(context);    }//-------------------------第四步----------------------------    @Override    protected void onDraw(Canvas canvas){        // 将背景填充成白色        canvas.drawColor(Color.WHITE);// ---------------------------------------------------        //第一条线,什么效果都不加                 effects[0] = null;// ---------------------------------------------------                 effects[1] = new CornerPathEffect(10);// ---------------------------------------------------                effects[2] = new DiscretePathEffect(1.0f, 5.0f);// ---------------------------------------------------                effects[3] = new DashPathEffect(new float[] { 20, 10, 5, 10 },phase);// ---------------------------------------------------                Path p = new Path();        p.addRect(0, 0, 8, 8, Path.Direction.CCW);        effects[4] = new PathDashPathEffect(p, 12, phase,PathDashPathEffect.Style.ROTATE);// ---------------------------------------------------                // 初始化ComposePathEffect        effects[5] = new ComposePathEffect(effects[2], effects[4]);// ---------------------------------------------------                effects[6] = new SumPathEffect(effects[4], effects[3]);// ---------------------------------------------------        // 将画布移动到(8、8)处开始绘制        canvas.translate(16, 100);        // 依次使用7种不同路径效果、7种不同的颜色来绘制路径        for (int i = 0; i < effects.length; i++){            paint.setPathEffect(effects[i]);            paint.setColor(colors[i]);            canvas.drawPath(path, paint);            canvas.translate(0, 160);        }        // 改变phase值,形成动画效果// ---------------------------------------------------                phase += 1;        invalidate();    }}

    二、不难看出其中每条线的属性和样式不一样,我在上面有 了很详细的讲解。

    这里就不在介绍没个子类的属性了,代码很简单,步骤如下:

    1、创建一个类继承view

    2、定义一个线集合,用来添加我们绘制的7跳线,通过一个for循环依次绘制

    3、上面代码中,在注释中前四步是准备工作,创建画笔、设置画布颜色、设定转折点的数量及每条线的颜色

    4、引用子类对象 ,来为每条线添加不同的属性。

    5、进行绘制,并且设置偏移量加1,并且设置重绘方法,实现一个动画效果

    代码结构视图

    View绘图之Path怎么使用

    三、xxxTo()方法绘制(本章延伸知识)

    一、直线绘制

    • 1 lineTo(float x, float y)

    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);          mPaint.setStrokeWidth(5);        // 实例化路径        mPath = new Path();        // 连接路径到点[100,100]        mPath.lineTo(100, 100);        // 绘制路径        canvas.drawPath(mPath, mPaint);    }

    View绘图之Path怎么使用

    • 多次调用lineTo方法来绘制

        @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);          mPaint.setStrokeWidth(5);        // 实例化路径        mPath = new Path();        mPath.moveTo(100, 100);          // 连接路径到点          mPath.lineTo(300, 100);          mPath.lineTo(400, 200);          mPath.lineTo(200, 200);         // 绘制路径        canvas.drawPath(mPath, mPaint);    }

    View绘图之Path怎么使用

    2 moveTo(float x, float y) +close()方法闭合曲线

     @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);          mPaint.setStrokeWidth(5);        // 实例化路径        mPath = new Path();        mPath.moveTo(100, 100);          // 连接路径到点          mPath.lineTo(300, 100);          mPath.lineTo(400, 200);          mPath.lineTo(200, 200);         // 闭合曲线        mPath.close();        // 绘制路径        canvas.drawPath(mPath, mPaint);    }

    View绘图之Path怎么使用

    二、画贝赛尔曲线

    • quadTo(float x1, float y1, float x2, float y2)

     @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);          mPaint.setStrokeWidth(5);        // 实例化路径        mPath = new Path();        // 移动起点至[100,100]          mPath.moveTo(100, 100);          // 连接路径到点          mPath.quadTo(200, 200, 300, 100);         canvas.drawPath(mPath, mPaint);    }

    View绘图之Path怎么使用

    View绘图之Path怎么使用

    • 3 cubicTo(float x1, float y1, float x2, float y2, float x3, float y3)

      @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);          mPaint.setStrokeWidth(5);        // 实例化路径        mPath = new Path();        // 移动起点至[100,100]          mPath.moveTo(100, 100);          // 连接路径到点          mPath.cubicTo(200, 200, 300, 0, 400, 100);          canvas.drawPath(mPath, mPaint);    }

    View绘图之Path怎么使用

    View绘图之Path怎么使用

    三、画弧线

    • arcTo (RectF oval, float startAngle, float sweepAngle) 是一个画弧线的方法,其实说白了就是从圆或椭圆上截取一部分而已。

     @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);          mPaint.setStrokeWidth(5);        // 实例化路径        mPath = new Path();        // 移动起点至[100,100]          mPath.moveTo(100, 100);          // 连接路径到点          RectF oval = new RectF(100, 100, 200, 200);          mPath.arcTo(oval, 0, 90);         canvas.drawPath(mPath, mPaint);    }

    View绘图之Path怎么使用

    • arcTo (RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo) 它会强制起点为绘制的起始点,而不是画布的左上角。

    我们来看看效果:

     @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);          mPaint.setStrokeWidth(5);        // 实例化路径        mPath = new Path();        // 移动起点至[100,100]          mPath.moveTo(100, 100);          // 连接路径到点          RectF oval = new RectF(100, 100, 200, 200);          mPath.arcTo(oval, 0, 90,true);         canvas.drawPath(mPath, mPaint);    }

    View绘图之Path怎么使用

    四、Path中除了上面介绍的几个XXXTo方法外还有一套rXXXTo方法:

    rCubicTo(float x1, float y1, float x2, float y2, float x3, float y3)  rLineTo(float dx, float dy)  rMoveTo(float dx, float dy)  rQuadTo(float dx1, float dy1, float dx2, float dy2)

    五、rXXXTo()方法和XXXTo()的区别

    例如: 起点(100,100)到终点(200,200)

    XXXTo绘制的距离就是,这里的move和lineTo的坐标都是对于画布左上角(0,0)来说。100到200的距离,绘制的总长度为00到200,也就是200距离

    而rXXXTo绘制的距离就是相对于100起点,再绘制200的距离。绘制的总长度就是300

    • 我们写一个例子

    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);          mPaint.setStrokeWidth(5);        // 实例化路径        mPath = new Path();        // 移动点至[100,100]          mPath.moveTo(100, 100);          // 连接路径到点          mPath.lineTo(200, 200);         canvas.drawPath(mPath, mPaint);    }

    View绘图之Path怎么使用

    这里的move和lineTo的坐标都是对于画布左上角(0,0)来说的,是一个绝对坐标。而我们换为mPath.rLineTo(200, 200); 后呢?

    View绘图之Path怎么使用

    是不是感觉线段长了很多,因为这里的(200,200)是相对于开始点(100,100)来说的,是相对坐标。如果换算成绝对坐标就是绘制一条(100,100)到(300,300)之间的线段。

    其实,这个前缀“r”也就是relative(相对)的简写!

    六、addXXX方法

    XXXTo方法可以连接Path中的曲线,而Path提供的另一系列addXXX方法则可以让我们直接往Path中添加一些曲线,比如

    • addArc(RectF oval, float startAngle, float sweepAngle) : 它允许我们将一段弧形添加至Path,注意这里我用到了“添加”这个词汇,

    也就是说,通过addXXX方法添加到Path中的曲线是不会和上一次的曲线进行连接的:

      @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);        mPaint.setStrokeWidth(5);        // 实例化路径        mPath = new Path();        // 移动点至[100,100]        mPath.moveTo(100, 100);        // 连接路径到点        mPath.lineTo(200, 200);        // 添加一条弧线到Path中        RectF oval = new RectF(100, 100, 300, 400);        mPath.addArc(oval, 0, 90);        canvas.drawPath(mPath, mPaint);    }

    View绘图之Path怎么使用

    如图和代码所示,虽然我们先绘制了由[100,100]到[200,200]的线段,但是在我们往Path中添加了一条弧线后该弧线并没与线段连接。

    除了addArc,Path还提供了一系列的add方法:

    addCircle(float x, float y, float radius, Path.Direction dir)

    addOval(float left, float top, float right, float bottom, Path.Direction dir)

    addRect(float left, float top, float right, float bottom, Path.Direction dir)

    addRoundRect(float left, float top, float right, float bottom, float rx, float ry, Path.Direction dir)

    这些方法和addArc有很明显的区别,就是多了一个Path.Direction参数,其他呢都大同小异,除此之外不知道大家还发现没有,addArc是往Path中添加一段弧,说白了就是一条开放的曲线,而上述几种方法都是一个具体的图形,或者说是一条闭合的曲线,Path.Direction的意思就是标识这些闭合曲线的闭合方向。Path.Direction只有两个常量值CCW和CW分别表示逆时针方向闭合和顺时针方向闭合

    例如顺时针方向闭合

    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);        // 实例化路径        mPath = new Path();        // 移动起点至[100,100]        mPath.moveTo(100, 100);        // 添加一条弧线到Path中          RectF oval = new RectF(100, 100, 300, 400);          mPath.addOval(oval, Path.Direction.CW);         canvas.drawPath(mPath, mPaint);        mPaint.setTextSize(50);        // 绘制路径上的文字          canvas.drawTextOnPath("123456789", mPath, 0, 0, mPaint);     }

    View绘图之Path怎么使用

    如果我们换作:mPath.addOval(oval, Path.Direction.CCW);

    • 逆时针封闭

    View绘图之Path怎么使用

    感谢各位的阅读,以上就是“View绘图之Path怎么使用”的内容了,经过本文的学习后,相信大家对View绘图之Path怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: View绘图之Path怎么使用

    本文链接: https://lsjlt.com/news/355380.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • View绘图之Path怎么使用
      这篇文章主要讲解了“View绘图之Path怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“View绘图之Path怎么使用”吧!使用Path绘制线path类是一个非常有用的类,他可以预先...
      99+
      2023-07-05
    • 自定义视图View绘图基础之Path的使用
      目录使用Path绘制线一、我们这里绘制了7条线来分别介绍上面的几种子类都有什么用二、不难看出其中每条线的属性和样式不一样,我在上面有 了很详细的讲解。三、xxxTo()方法绘制(本章...
      99+
      2023-05-14
      自定义视图 自定义View 自定义视图 Path使用
    • 自定义view视图之Canvas+Paint图形绘制
      目录一、绘图都需要那些相关知识二、我们先来了解下Canvas三、那我们如何来使用这些方法进行绘制呢?1、我们需要创建一个类继承view(1)首先定义一个画笔对象和一个画布的颜色(2)...
      99+
      2023-05-14
      自定义view 自定义view视图 Canvas+Paint 自定义view图形绘制
    • view视图之Canvas+Paint图形绘制的方法是什么
      这篇文章主要介绍“view视图之Canvas+Paint图形绘制的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“view视图之Canvas+Paint图形绘制的方法是什么”文章能帮助大家解...
      99+
      2023-07-05
    • Qt图片绘图类之QPixmap/QImage/QPicture怎么使用
      这篇文章主要介绍了Qt图片绘图类之QPixmap/QImage/QPicture怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt图片绘图类之QPixmap/QImage/QPicture怎么使用文章都...
      99+
      2023-07-05
    • Python之Pygame的Draw绘图方法怎么使用
      今天小编给大家分享一下Python之Pygame的Draw绘图方法怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Py...
      99+
      2023-07-05
    • wps绘图工具怎么使用
      这篇文章主要介绍了wps绘图工具怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇wps绘图工具怎么使用文章都会有所收获,下面我们一起来看看吧。首先点击顶部“插入”选项。接着点击其中的“形状”按钮。然后选择...
      99+
      2023-07-02
    • Android自定义View系列之Path绘制仿支付宝支付成功动画
      前言 使用支付宝付款时,我们可以看到成功或者失败都会有个动画提示,如果我们需要做这样的效果的话,当然,你可以让设计师给你做个GIF,但是我们知道图像比较耗内存的,我们自己可以用...
      99+
      2022-06-06
      path view 支付宝 动画 Android
    • GoJs图片绘图模板Picture怎么使用
      本文小编为大家详细介绍“GoJs图片绘图模板Picture怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“GoJs图片绘图模板Picture怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。go.Pi...
      99+
      2023-07-06
    • GoJs图形绘图模板Shape怎么使用
      这篇“GoJs图形绘图模板Shape怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“GoJs图形绘图模板Shape怎么...
      99+
      2023-07-06
    • Flutter绘图组件之CustomPaint使用详解
      目录简介CustomPaint 介绍CustomPainter 示例总结简介 在有些场景中,我们会需要绘制一些高度定制化的组件,比如 UI 设计师给我们出了个难题 —&m...
      99+
      2024-04-02
    • 自定义视图view的折线图怎么使用
      这篇文章主要讲解了“自定义视图view的折线图怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“自定义视图view的折线图怎么使用”吧!绘制折线图预览图绘制这个折线图需要都需要哪些步骤?...
      99+
      2023-07-05
    • 怎么使用python绘制雷达图
      这篇文章主要介绍了怎么使用python绘制雷达图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python有哪些常用库python常用的库:1.requesuts;2.scr...
      99+
      2023-06-14
    • 怎么在Python中使用matplotlib绘图
      今天就跟大家聊聊有关怎么在Python中使用matplotlib绘图,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python有哪些常用库python常用的库:1.requesuts...
      99+
      2023-06-14
    • 怎么使用Python的Matplotlib库绘图
      这篇“怎么使用Python的Matplotlib库绘图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Python的M...
      99+
      2023-07-02
    • 怎么使用python绘制火山图
      这篇文章主要讲解了“怎么使用python绘制火山图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用python绘制火山图”吧!导入模块import numpy as...
      99+
      2023-07-02
    • python Pandas绘图函数怎么使用
      这篇文章主要介绍了python Pandas绘图函数怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python Pandas绘图函数怎么使用文章都会有所收获,下面我们一起来看看吧。简介method绘图类...
      99+
      2023-07-04
    • 怎么使用Vue+Echarts绘制饼图
      这篇文章主要介绍“怎么使用Vue+Echarts绘制饼图”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Vue+Echarts绘制饼图”文章能帮助大家解决问题。1 引入Echarts1.1 安...
      99+
      2023-07-05
    • markdown绘图插件mermaid怎么使用
      使用Markdown绘图插件Mermaid,可以通过以下步骤进行使用: 安装Mermaid插件:在Markdown编辑器中搜索M...
      99+
      2023-10-26
      markdown mermaid
    • 怎么用H5绘图
      这篇文章主要介绍“怎么用H5绘图”,在日常操作中,相信很多人在怎么用H5绘图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用H5绘图”的疑惑有所帮助!接下来,请跟着小编一...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作