在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawArc()的用法、参数含义及画图原理很是不理解,在网上搜索了一些,加上自己的理解,在此做个小总结,作为学习过程中的一个小脚印:

  一. 代码及相应的运行结果

    1.填充圆弧但不含圆心(注意:代码变动部分加粗红色给出,下同

      (1)代码

1          /***********配置画笔*************/
2             Paint paint=new Paint();    //采用默认设置创建一个画笔
3             paint.setAntiAlias(true);//使用抗锯齿功能
4             paint.setColor(0xFFA4C739);    //设置画笔的颜色为绿色
5             paint.setStyle(Paint.Style.FILL);//设置画笔类型为填充
6             /***********绘制圆弧*************/
7             RectF rectf_head=new RectF(10, 10, 100, 100);//确定外切矩形范围
8             rectf_head.offset(100, 20);//使rectf_head所确定的矩形向右偏移100像素,向下偏移20像素
9             canvas.drawArc(rectf_head, -10, -160, false, paint);//绘制圆弧,不含圆心                

      (2) 运行结果

    2.填充圆弧并且含圆心

      (1)代码

1        /***********配置画笔*************/
2             Paint paint=new Paint();    //采用默认设置创建一个画笔
3             paint.setAntiAlias(true);//使用抗锯齿功能
4             paint.setColor(0xFFA4C739);    //设置画笔的颜色为绿色
5             paint.setStyle(Paint.Style.FILL);//设置画笔类型为填充
6             /***********绘制圆弧*************/
7             RectF rectf_head=new RectF(10, 10, 100, 100);//确定外切矩形范围
8             rectf_head.offset(100, 20);//使rectf_head所确定的矩形向右偏移100像素,向下偏移20像素
9             canvas.drawArc(rectf_head, -10, -160, true, paint);//绘制圆弧,含圆心

      (2)运行效果

  

    3.不填充圆弧含圆心

      (1)代码

1        /***********配置画笔*************/
2             Paint paint=new Paint();    //采用默认设置创建一个画笔
3             paint.setAntiAlias(true);//使用抗锯齿功能
4             paint.setColor(0xFFA4C739);    //设置画笔的颜色为绿色
5             paint.setStyle(Paint.Style.STROKE);//设置画笔类型为STROKE(个人感觉是描边的意思)
6             /***********绘制圆弧*************/
7             RectF rectf_head=new RectF(10, 10, 100, 100);//确定外切矩形范围
8             rectf_head.offset(100, 20);//使rectf_head所确定的矩形向右偏移100像素,向下偏移20像素
9             canvas.drawArc(rectf_head, -10, -160, true, paint);//绘制圆弧,含圆心

      (2)运行效果

    4.不填充圆弧不含圆心

      (1)代码

1        /***********配置画笔*************/
2             Paint paint=new Paint();    //采用默认设置创建一个画笔
3             paint.setAntiAlias(true);//使用抗锯齿功能
4             paint.setColor(0xFFA4C739);    //设置画笔的颜色为绿色
5             paint.setStyle(Paint.Style.STROKE);//设置画笔类型为STROKE类型(个人感觉是描边的意思)
6             /***********绘制圆弧*************/
7             RectF rectf_head=new RectF(10, 10, 100, 100);//确定外切矩形范围
8             rectf_head.offset(100, 20);//使rectf_head所确定的矩形向右偏移100像素,向下偏移20像素
9             canvas.drawArc(rectf_head, -10, -160, false, paint);//绘制圆弧,不含圆心

      (2)运行效果

 

 

    5. 总结

      由上面的例子可以看出,是否包含圆心是有函数drawArc()第四个参数决定的(true:包含;false:不包含)。圆弧是否为填充由画笔的类型决定的

paint.setStyle()的参数决定的(Paint.Style.STROKE:描边(个人的翻译,未必准确);Paint.Style.FILL:填充;Paint.Style.FILL_AND_STROKE:既填充又描边)。

  二.绘制圆弧函数详细分析--drawArc()

    1.官方API:   

  public void drawArc(RectF oval,  float startAngle,  float sweepAngle, boolean useCenter, Paint paint)
Draw the specified arc, which will be scaled to fit inside the specified oval. If the sweep angle is >= 360, then the oval is drawn completely. Note that this differs slightly from SkPath::arcTo, which treats the sweep angle mod 360. 
参数:(英文)
oval - The bounds of oval used to define the shape and size of the arc
startAngle - Starting angle (in degrees) where the arc begins
sweepAngle - Sweep angle (in degrees) measured clockwise
useCenter - If true, include the center of the oval in the arc, and close it if it is being stroked. This will draw a wedge
paint - The paint used to draw the arc 
   参数:(中文)
  oval -     用于确定圆弧形状与尺寸的椭圆边界(即椭圆外切矩形)
  startAngle -    开始角度(以时钟3点的方向为0°,逆时针为正方向
  sweepAngle -    扫过角度(以时钟3点的方向为0°,逆时针为正方向
  useCenter -     是否包含圆心
  paint -           绘制圆弧的画笔
2.绘制圆弧的原理
  • RectF(float left, float top, float right, float bottom)得到一个矩形,此虚拟矩形内切绘制一个椭圆(如果长和宽相等,则为圆)。

  • 以矩形的中心为圆心,以时钟3点的方向为0°,逆时针为正方向,从0°正方向旋转startAngle 度,和椭圆相交得到一条直线和一个交点。
  • 从这条直线开始,正方向旋转sweepAngle度,得到另一条直线和交点,这样就得到了一个两交点之间的 圆弧。
  

  

转载于:https://www.cnblogs.com/tjudzj/p/4387145.html

android中画弧函数canvas.drawArc()之理解相关推荐

  1. 介绍Android中的Paint和Canvas的概念和使用方法

    下面开始正式介绍内容 一.介绍Android中的Paint和Canvas的概念和使用方法 Android中的Paint和Canvas的概念是很简单的,就是我们用画笔在画布上进行绘制没什么难度的,我们只 ...

  2. android demo 调用,Android中调用C++函数的一个简单Demo

    这里我不想多解释什么,对于什么JNI和NDK的相关内容大家自己去百度或谷歌.我对Android的学习也只是个新手 .废话少说直接进入正题. 一.在Eclipse中创建一个Android Applica ...

  3. android中调用fft函数,J使用PCM数据在Android中转换FFT(JTransforms FFT in Android from PCM data)...

    J使用PCM数据在Android中转换FFT(JTransforms FFT in Android from PCM data) 我一直在玩这个游戏已经有一段时间了,我无法弄清楚我在这里要做的事情. ...

  4. python中画logistic函数_Logistic分类函数

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 简书地址:https://www.jianshu.com/p/abc... 这篇教程是翻译Peter R ...

  5. 在python中、对于函数定义代码的理解_python中如何理解装饰器代码?

    长文预警,[最浅显易懂的装饰器讲解] 能不能专业地复制题目?配上代码,问题分段. 我来给提主配上问题的代码. 正式回答: 1:如何理解return一个函数,它与return一个值得用法区别在哪? 敲黑 ...

  6. Android中使用SurfaceView和Canvas来绘制动画

    事实上每一个View中都有Canvas能够用来绘制动画.仅仅须要在这个View中重载onDraw()方法就能够,可是SurfaceView类是一个专门用来制动动画的类. Canvas(中文叫做&quo ...

  7. android java函数_java – 在android中创建全局函数

    像这样创建类并在此处添加您的函数: package com.mytest; import android.content.Context; import android.net.Connectivit ...

  8. Android -- 图片画画板(canvas、paint、bitmap)

    布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:too ...

  9. Android中画桌子椅子的几种方法(动态添加座子椅子)(一)

    第一种:自定义View继承ViewGroup实现 自定义viewgroup,通过对xml中的每个控件获取他们的宽高,然后根据三角函数关系进行位置的放置 onMeasure是测量每个子控件的宽高 onL ...

最新文章

  1. 华为云查询弹性云服务器规格信息,通用计算型弹性云服务器规格介绍详情-华为云...
  2. QML和C++混合编程--(一)
  3. 【302天】跃迁之路——程序员高效学习方法论探索系列(实验阶段60-2017.12.04)...
  4. Vitamio中文API文档(1)—— MediaStore
  5. 等待来自服务器的响应超时_服务器的基本框架结构
  6. 从BMW Vision iNEXT 看宝马如何进军自动驾驶 1
  7. vue-router总结2
  8. 学习django笔记(天天生鲜)
  9. 使用WePE对无法启动的系统文件进行操作
  10. mysql菜单表设计_多级联动菜单的数据库表如何设计?
  11. 注册表编辑已被管理员禁用—解决办法
  12. 备份与同步(二) 如何使用云存储来实现多设备的备份与同步
  13. 阿里巴巴算法岗编程题:菜鸟仓库
  14. 【机器学习】阿里云天池竞赛——工业蒸汽量预测(1)
  15. nc命令卡住不返回的分析
  16. windows找不到文件gpedit.msc怎么办?
  17. pyhton爬取武汉地铁信息
  18. 远见:如何规划职业生涯3大阶段
  19. JS 判断浏览器版本
  20. 作为全球最大的乳酸链球菌素生产区,2020年我国乳酸链球菌素产量达到1388.3吨[图]

热门文章

  1. 引导linux为什么要用实模式,Linux引导过程与故障排除|第1章:Linux启动流程详解...
  2. php radius类,PHP Radius Search
  3. 编译和链接的区别、makefile怎么写
  4. leetcode - 739. 每日温度
  5. TensorFlow第八步 Nesterov's accelerated gradient descent+L2 regularization
  6. python 中【example[I] for example in dataset】的理解
  7. Golang的错误处理笔记
  8. 计算机视觉基础-图像处理(图像分割/二值化)cpp+python
  9. Struts2值栈详解
  10. Android编译系统简要介绍和学习计划