前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >绘图[下](四)

绘图[下](四)

作者头像
李小白是一只喵
发布2020-04-24 08:46:02
4530
发布2020-04-24 08:46:02
举报
文章被收录于专栏:算法微时光

image.png

目录

PATH

使用Path不仅能够绘制简单图形,也可以绘制这些比较复杂的图形。 如绘制一个心形 正多边形 五角星等.

Path封装了由直线和曲线(二次,三次贝塞尔曲线)构成的几何路径。你能用Canvas中的drawPath来把这条路径画出来(同样支持Paint的不同绘制模式),也可以用于剪裁画布和根据路径绘制文字。我们有时会用Path来描述一个图像的轮廓,所以也会称为轮廓线(轮廓线仅是Path的一种使用方法,两者并不等价)

废话不多说,开始战斗!!O(∩_∩)O

使用moveTo和lineTo画直线

首先需要定义下画笔,和昨天的project结构一样:

代码语言:javascript
复制
        // 设置画笔
        Paint mPaint = new Paint();
        // 设定画笔颜色
        mPaint.setColor(Color.RED);
        //抗锯齿
        mPaint.setAntiAlias(true);
        //设置宽度
        mPaint.setStrokeWidth(20);
        // 设定画笔填充类型(不填充)
        mPaint.setStyle(Paint.Style.STROKE);

定义好之后开始定义path:

代码语言:javascript
复制
        //获取控件的宽高
        int width = getWidth();
        int height = getHeight();
        //移动坐标系
        canvas.translate(width / 2, height / 2);
        //创建path
        Path path = new Path();
        //移动到开始坐标点
        path.moveTo(0, 0);
        //划线到终点坐标点
        path.lineTo(300,300);
        // 绘制Path
        canvas.drawPath(path, mPaint);

画出一条红线:

image.png

运行效果:

image.png

addCircle绘制圆

使用addCircle函数来绘制圆圈:

代码语言:javascript
复制
      // 设置画笔
        Paint mPaint = new Paint();
        // 设定画笔颜色
        mPaint.setColor(Color.RED);
        //抗锯齿
        mPaint.setAntiAlias(true);
        //设置宽度
        mPaint.setStrokeWidth(20);
        // 设定画笔填充类型(不填充)
        mPaint.setStyle(Paint.Style.STROKE);

        //获取控件的宽高
        int width = getWidth();
        int height = getHeight();
        //移动坐标系
        canvas.translate(width / 2, height / 2);
        // 制定路径
        Path mPath = new Path();

        mPath.addCircle(0,0,width/4, Path.Direction.CW);

        canvas.drawPath(mPath, mPaint);

效果:

image.png

运行结果:

image.png

接下来,做一个小练习,绘制五角星.O(∩_∩)O

小练习(绘制五角星)

首先学习下绘制五角星的方法: 1.绘制一个圆 2.从这个圆中,均匀的选出五个点,每个点之间的弧度差是:360/5. 3.根据笔画依次连接这五个点.

源码:

代码语言:javascript
复制
package com.example.user.test11;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import android.graphics.Path;

public class HelloView extends View{

    public HelloView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);

        // 设置画笔
        Paint mPaint = new Paint();
        // 设定画笔颜色
        mPaint.setColor(Color.RED);
        //抗锯齿
        mPaint.setAntiAlias(true);
        //设置宽度
        mPaint.setStrokeWidth(20);
        // 设定画笔填充类型(不填充)
        mPaint.setStyle(Paint.Style.STROKE);

        //获取控件的宽高
        int width = getWidth();
        int height = getHeight();
        //移动坐标系
        canvas.translate(width / 2, height / 2);

        float radius = width / 2;

        //第一个点的坐标
        float x1 = 0;
        float y1 = radius;

        //第二个点的坐标
        float x2 = (float)(Math.cos(Math.PI / 2 - Math.PI * 2 / 5) * radius);
        float y2 = (float)(Math.sin(Math.PI / 2 - Math.PI * 2 / 5) * radius);
        //第三个点的坐标
        float x3 = (float)(-(Math.cos(Math.PI / 2 - Math.PI * 2 / 5) * radius));
        float y3 = (float)(Math.sin(Math.PI / 2 - Math.PI * 2 / 5) * radius);
        //第四个点的坐标
        float x4 = (float)(-(Math.cos(Math.PI * 2 / 5 - (Math.PI / 2 - Math.PI * 2 / 5)) * radius));
        float y4 = (float)(-(Math.sin(Math.PI * 2 / 5 - (Math.PI / 2 - Math.PI * 2 / 5)) * radius));
        //第五个点的坐标
        float x5 = (float)(Math.cos(Math.PI * 2 / 5 - (Math.PI / 2 - Math.PI * 2 / 5)) * radius);
        float y5 = (float)(-(Math.sin(Math.PI * 2 / 5 - (Math.PI / 2 - Math.PI * 2 / 5)) * radius));
        // 制定路径
        Path mPath = new Path();

        mPath.moveTo(x1,y1);
        mPath.lineTo(x5,y5);
        mPath.lineTo(x3,y3);
        mPath.lineTo(x2,y2);
        mPath.lineTo(x4,y4);
        mPath.lineTo(x1,y1);

        //绘制五角星
        canvas.drawPath(mPath, mPaint);
        //绘制圆
        canvas.drawCircle(0, 0, radius, mPaint);
    }

}

注意:JAVA中Math类中的三角函数参数是弧度并非数值

实现效果:

image.png

运行结果:

image.png

参考

Android开发中三个绘图工具(Paint,Canvas,Path)的基本用法(总结) Android绘图(2D绘图、3D绘图) Android 自定义View之绘图 Android开发--图形图像与动画(一)--Paint和Canvas类 Android开发之Path详解

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • PATH
  • 使用moveTo和lineTo画直线
  • addCircle绘制圆
  • 小练习(绘制五角星)
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档