1 缩略图

2 绘制颜色

    // 传入一个Color类的常量参数来设置画布颜色// 绘制蓝色canvas.drawColor(Color.BLUE); 

3 绘制点(drawPoint)

在某个坐标处绘制点,可画一个点或一组点(多个点)

// 特别注意:需要用到画笔Paint
// 所以之前记得创建画笔
// 为了区分,这里使用了两个不同颜色的画笔// 描绘一个点
// 在坐标(200,200)处
canvas.drawPoint(300, 300, mPaint1);    // 绘制一组点,坐标位置由float数组指定
// 此处画了3个点,位置分别是:(600,500)、(600,600)、(600,700)
canvas.drawPoints(new float[]{         600,500,600,600,600,700},mPaint2);

效果图:

4  绘制直线(drawLine)

  • 原理:两点(初始点 & 结束点)确定一条直线
// 画一条直线
// 在坐标(100,200),(700,200)之间绘制一条直线canvas.drawLine(100,200,700,200,mPaint1);// 绘制一组线
// 在坐标(400,500),(500,500)之间绘制直线1
// 在坐标(400,600),(500,600)之间绘制直线2canvas.drawLines(new float[]{400,500,500,500,400,600,500,600},mPaint2);}

5  绘制矩形(drawRect)

  • 原理:矩形的对角线顶点确定一个矩形,一般是采用左上角和右下角的两个点的坐标。
       // 关于绘制矩形,Canvas提供了三种重载方法// 方法1:直接传入两个顶点的坐标// 两个顶点坐标分别是:(100,100),(800,400)canvas.drawRect(100,100,800,400,mPaint);// 方法2:将两个顶点坐标封装为RectRectFRect rect = new Rect(100,100,800,400);canvas.drawRect(rect,mPaint);// 方法3:将两个顶点坐标封装为RectFRectF rectF = new RectF(100,100,800,400);canvas.drawRect(rectF,mPaint);// 特别注意:Rect类和RectF类的区别// 精度不同:Rect = int & RectF = float// 三种方法画出来的效果是一样的。

6  绘制圆角矩形

其中的点(100,100)为左上角顶点 与上述绘制矩形时一至

       // 方法1:直接传入两个顶点的坐标// API21时才可使用// 第5、6个参数:rx、ry是圆角的参数,下面会详细描述canvas.drawRoundRect(100,100,800,400,30,30,mPaint);// 方法2:使用RectF类RectF rectF = new RectF(100,100,800,400);canvas.drawRoundRect(rectF,30,30,mPaint);
  • 与矩形相比,圆角矩形多了两个参数rx 和 ry
  • 圆角矩形的角是椭圆的圆弧,rx 和 ry实际上是椭圆的两个半径

实际上,在rx为宽度的一半,ry为高度的一半时,刚好是一个椭圆;但由于当rx大于宽度一半,ry大于高度一半时,无法计算出圆弧,所以drawRoundRect对大于该数值的参数进行了修正,凡是大于一半的参数均按照一半来处理.

绘制椭圆

矩形的对角线顶点确定矩形,根据传入矩形的长宽作为长轴和短轴画椭圆,椭圆传入的参数和矩形是一样的,绘制椭圆实际上是绘制一个矩形的内切图形。

        // 方法1:使用RectF类RectF rectF = new RectF(100,100,800,400);canvas.drawOval(rectF,mPaint);// 方法2:直接传入与矩形相关的参数canvas.drawOval(100,100,800,400,mPaint);// 为了方便表示,画一个和椭圆一样参数的矩形canvas.drawRect(100,100,800,400,mPaint);

8  绘制圆

  • 圆心坐标+半径决定圆
// 参数说明:
// 1、2:圆心坐标
// 3:半径
// 4:画笔// 绘制一个圆心坐标在(500,500),半径为400 的圆。canvas.drawCircle(500,500,400,mPaint); 

9 绘制圆弧

通过圆弧角度的起始位置和扫过的角度确定圆弧

/ 绘制圆弧共有两个方法
// 相比于绘制椭圆,绘制圆弧多了三个参数:
startAngle  // 确定角度的起始位置
sweepAngle // 确定扫过的角度
useCenter   // 是否使用中心(下面会详细说明)// 方法1
public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint){}// 方法2
public void drawArc(float left, float top, float right, float bottom, float startAngle,float sweepAngle, boolean useCenter, @NonNull Paint paint) {}
// 以下示例:绘制两个起始角度为0度、扫过90度的圆弧
// 两者的唯一区别就是是否使用了中心点// 绘制圆弧1(无使用中心)RectF rectF = new RectF(100, 100, 800,400);// 绘制背景矩形canvas.drawRect(rectF, mPaint1);// 绘制圆弧 0度到 90度canvas.drawArc(rectF, 0, 90, false, mPaint2);// 绘制圆弧2(使用中心)RectF rectF2 = new RectF(100,600,800,900);// 绘制背景矩形canvas.drawRect(rectF2, mPaint1);// 绘制圆弧canvas.drawArc(rectF2,0,90,true,mPaint2);//不使用中心点:圆弧的形状 = (起、止点连线+圆弧)构成的面积
//使用中心店:圆弧面积 = (起点、圆心连线 + 止点、圆心连线+圆弧)构成的面积

Android Canvas 绘制基本形状 Android自定义View(七)相关推荐

  1. Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解

    Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...

  2. Android自定义View(七)_Canvas之图片文字

    在上一篇文章Canvas之画布操作中我们了解了画布的一些基本操作方法,本次了解一些绘制图片文字相关的内容.如果你对前几篇文章讲述的内容熟练掌握的话,那么恭喜你,本篇结束之后,大部分的自定义View已经 ...

  3. Android仿IOS解锁密码界面-自定义view系列(6)

    Android仿IOS解锁密码界面-自定义view系列 功能简介 主要实现步骤-具体内容看github项目里的代码 xml相关属性设置 Android Studio 代码 Android技术生活交流 ...

  4. Android安卓仿IOS音量调节-自定义view系列(4)

    Android安卓仿IOS音量调节-自定义view系列 功能简介 主要实现步骤 xml相关属性设置 java代码 Android技术生活交流 更多其他页面-自定义View-实用功能合集:点击查看 Gi ...

  5. Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件

    Android绘图机制(三)--自定义View的三种实现方式以及实战项目操作 在Android绘图机制(一)--自定义View的基础属性和方法 里说过,实现自定义View有三种方式,分别是 1.对现有 ...

  6. Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...

  7. Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习...

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...

  8. android canvas绘制圆角_Android自定义View撸一个渐变的温度指示器(TmepView)

    秦子帅明确目标,每天进步一点点..... 作者 |  andy 地址 |  blog.csdn.net/Andy_l1/article/details/82910061 1.概述 自定义View对需要 ...

  9. android绘制心形_Android自定义View系列(一)——打造一个爱心进度条

    写作原因:Android进阶过程中有一个绕不开的话题--自定义View.这一块是安卓程序员更好地实现功能自主化必须迈出的一步.下面这个系列博主将通过实现几个例子来认识安卓自定义View的方法.从自定义 ...

最新文章

  1. 网络-开发-CIO全面覆盖——51CTO.com今日变脸
  2. 记:PyInstaller打包一个最简单的kivy应用
  3. 【JavaSE04】Java中循环语句for,while,do···while-思维导图
  4. 扩展 lua require 的行为
  5. 解决SwipeRefreshLayout左右滑动事件冲突的问题
  6. 1.IDA-基本操作(改变Image Base地址、打开、保存IDA的不同方式)
  7. jzoj4669-[NOIP2016提高A组模拟7.19]弄提纲【LCA,KMP,字符串】
  8. 如何查看hadoop是32位还是64位
  9. 【转】Numpy三维数组的转置与交换轴
  10. 十一、K8s 健康性检查
  11. Android手势监听类GestureDetector的使用
  12. 朴素贝叶斯和情感分类
  13. 数据库系统工程师考试的考点是哪些?
  14. linux 防火墙 防ddos,Linux防火墙iptables以及如何防御DDOS攻击
  15. 3款超好用的音频剪辑软件,功能全面,操作简单!
  16. 怎样开好项目启动大会
  17. 实用selenium+python实现web自动化测试
  18. 车票购买最低消费问题java_浅析12306售票算法(java版)
  19. 毕业设计-基于SSM实现农产品销售管理平台
  20. 最新:前SAP首席科学家邬学宁加入e成科技 担任首席数据官

热门文章

  1. AAAI 2020 | 微软亚洲研究院6篇精选论文在家看
  2. 比手工模型快10~100倍,谷歌揭秘视频NAS三大法宝
  3. nonlocal python3_Python 中的 global、nonlocal 辨析
  4. 【Java进阶营】Java多线程基础学习(一)
  5. 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python基础简介及入门配置
  6. oracle更改语句用 怎么站位,Oracle 数据库如何修改控制文件的位置
  7. python数据处理随笔总结
  8. 从零开始编写深度学习库(五)PoolingLayer 网络层CPU编写
  9. Matlab线性/非线性规划优化算法(5)
  10. 遥感图像数据类型的区别