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

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

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

      (1)代码

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

      (2) 运行结果

    2.填充圆弧并且含圆心

      (1)代码

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

      (2)运行效果

  

    3.不填充圆弧含圆心

      (1)代码

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

      (2)运行效果

    4.不填充圆弧不含圆心

      (1)代码

        /***********配置画笔*************/
Paint paint=new Paint(); //采用默认设置创建一个画笔
paint.setAntiAlias(true);//使用抗锯齿功能
paint.setColor(0xFFA4C739); //设置画笔的颜色为绿色
paint.setStyle(Paint.Style.STROKE);//设置画笔类型为STROKE类型(个人感觉是描边的意思)
/***********绘制圆弧*************/
RectF rectf_head=new RectF(, , , );//确定外切矩形范围
rectf_head.offset(, );//使rectf_head所确定的矩形向右偏移100像素,向下偏移20像素
canvas.drawArc(rectf_head, -, -, 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度,得到另一条直线和交点,这样就得到了一个两交点之间的 圆弧。
  

  

android中画弧函数canvas.drawArc()之理解的更多相关文章

  1. android中画文字的换行 办法(对于遇到canvas.drawText(String s )无法实现换行问题的解决)

    在使用canvas.drawText()绘制文字的时候,发现,如果需要绘制的文字较长,需要换行,通过在文字中加上“\n"或者”\r\n"都无法实现换行,如果非要使用canvas.d ...

  2. 在android中画圆形图片的几种办法

    在开发中常常会有一些需求,比方显示头像,显示一些特殊的需求,将图片显示成圆角或者圆形或者其它的一些形状. 可是往往我们手上的图片或者从server获取到的图片都是方形的.这时候就须要我们自己进行处理, ...

  3. Android中SensorManager.getRotationMatrix函数原理解释

    SensorManager是Android中的一个类,其有一个函数getRotationMatrix,可以计算出旋转矩阵,进而通过getOrientation求得设备的方向(航向角.俯仰角.横滚角). ...

  4. Android中调用C++函数的一个简单Demo

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

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

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

  6. Latex中画出函数文件的调用关系拓扑图

    流程图,思维导图,拓扑图通常能把我们遇到的一些复杂的关系结构用图形的方式展现出来.在Latex中要想画这样的拓扑图,有一个很好用的绘图工具包 pgf/tikz . 1.pgf/tikz的安装:pgf/ ...

  7. Android中Matrix的pre post set方法理解(转载来源:Linux社区 作者:zjmdp)

    虽说以前学习过线性代数和图形学原理,但是在实际中碰到matrix还是疑惑了好一阵子,今天通过向同事请教终于找到一点门路,特总结如下: Matrix主要用于对平面进行缩放,平移,旋转以及倾斜操作,为简化 ...

  8. c++中指针作为函数参数的详细理解

    在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着 ...

  9. iOS的 context 和Android 中的 canvas

    ios 想要绘图,要用到CGContextRef类.最基本的用法是在- (void)drawRect:(CGRect)rect 函数中绘制. Android 中要用到Canvas类.最基本的用法是在  ...

随机推荐

  1. UVa 1025 A Spy in the Metro (DP动态规划)

    题意:一个间谍要从第一个车站到第n个车站去会见另一个,在是期间有n个车站,有来回的车站,让你在时间T内时到达n,并且等车时间最短, 也就是尽量多坐车,最后输出最少等待时间. 析:这个挺复杂,首先时间是 ...

  2. UISwitch的常见属性

    1.onTintColor属性:设置ON一边的背景颜色,默认是绿色. 2.tintColor属性:设置OFF一边的背景颜色,默认是灰色,发现OFF背景颜色其实也是控件”边框“颜色. 3.thumbTi ...

  3. Tomcat项目部署问题记录

    Tomcat项目部署问题记录 1. -bash: ./startup.sh: Permission denied 问题: 新装tomcat后,执行启动命令会出现 -bash: ./startup.sh ...

  4. 51nod1459迷宫问题—(迪杰斯特拉)

    1459 迷宫游戏  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间, ...

  5. solrconfig.xml配置详解

    solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置. 可以在tomcat的安装路径下找到这个文件C:\Program File ...

  6. maven项目打jar包

    打包有两种方式: 1.直接 项目--右键--export,选择JAR file打包(不推荐这种方式): 这样直接打的包通过java -jar 会提示“没有主清单属性”,需要修改jar包中的MANIFE ...

  7. 使用Base64进行string的加密和解密

    //字符串转bytes var ebytes = System.Text.Encoding.Default.GetBytes(keyWord); //bytes进行base64加密 var strBa ...

  8. 兼容性测试中如何切换和管理多个JDK版本

    本文由作者邹珍珍授权网易云社区发布. 一.测试背景: 项目对外提供JAR包,需要测试该JAR包对不同JDK版本(1.6至1.9版本)的兼容性.下面主要介绍在兼容性测试中,JDK多版本共存时如何配置环境 ...

  9. Linux基础命令(一)

    Linux语法命令 [选项] 参数注意:[]内容是对命令的扩张1.命令中单词之间空格隔开2.单行命令最多256个字符3.大小写区分 clear 清屏pwd 查看当前目录cd 切换目录    .表示当前 ...

  10. 【FAQ】tomcat启动jdk版本不一致

    一.tomcat7.exe与startup.bat的区别: 1.这两个都可以启动tomcat,但tomcat7.exe必须安装了服务才能启动,而startup.bat不需要 2.另外一个区别是它们启动 ...