public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter,@NonNull Paint paint) {drawArc(oval.left, oval.top, oval.right, oval.bottom, startAngle, sweepAngle, useCenter,paint);}

要实现这个方法,我们要传5个参数进去。


第一个参数:RectF oval

oval 参数的作用是:定义的圆弧的形状和大小的范围

        /*** 这是一个居中的圆*/float x = (getWidth() - getHeight() / 2) / 2;float y = getHeight() / 4;RectF oval = new RectF( x, y,getWidth() - x, getHeight() - y); 

第二个参数:float startAngle

这个参数的作用是设置圆弧是从哪个角度来顺时针绘画的

canvas.drawArc(oval,-90,120,false,mPaint);

canvas.drawArc(oval,90,110,false,mPaint);

//设置为-180的时候也是这样
canvas.drawArc(oval,180,140,false,mPaint);

//设置为360的时候也是这样
canvas.drawArc(oval,0,140,false,mPaint);

第三个参数:float sweepAngle

这个参数的作用是设置圆弧扫过的角度

    我们从上面的代码就可以知道其中的作用了

第四个参数:boolean useCenter

这个参数的作用是设置我们的圆弧在绘画的时候,是否经过圆形
值得注意的是,这个参数在我们的 mPaint.setStyle(Paint.Style.STROKE); 设置为描边属性的时候,是看不出效果的。

        /***这里我是偷懒了,建议不要在onDraw()方法里初始化对象*/Paint p = new Paint();//这个是画矩形的画笔,方便大家理解这个圆弧p.setStyle(Paint.Style.STROKE);p.setColor(Color.RED);mPaint.setAntiAlias(true);//取消锯齿mPaint.setStyle(Paint.Style.FILL);//设置画圆弧的画笔的属性为描边(空心),个人喜欢叫它描边,叫空心有点会引起歧义mPaint.setStrokeWidth(mCircleWidth);mPaint.setColor(Color.CYAN);/*** 这是一个居中的圆*/float x = (getWidth() - getHeight() / 2) / 2;float y = getHeight() / 4;RectF oval = new RectF( x, y,getWidth() - x, getHeight() - y);canvas.drawArc(oval,360,140,false,mPaint);//画圆弧,这个时候,绘制没有经过圆心canvas.drawRect(oval, p);//画矩形

//当我们设置为true的时候,绘制的时候就经过圆心了
canvas.drawArc(oval,360,140,true,mPaint);

第五个参数:Paint paint

这个参数的作用是设置我们的画笔对象的属性

mPaint.setAntiAlias(true);//取消锯齿mPaint.setStyle(Paint.Style.FILL);//设置画圆弧的画笔的属性为描边(空心),个人喜欢叫它描边,叫空心有点会引起歧义mPaint.setStrokeWidth(mCircleWidth);mPaint.setColor(Color.CYAN);

这里还是要强调一下,当 p.setStyle(Paint.Style.STROKE)的时候,我们的第四个参数boolean useCenter,是看不到效果的。


下面是代码全文

public class CustomProgress extends View{private Paint mPaint;/*** 圆的宽度*/private int mCircleWidth = 3;public CustomProgress(Context context) {this(context, null);}public CustomProgress(Context context, AttributeSet attrs) {this(context, attrs, 0);}public CustomProgress(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);mPaint = new Paint();}@Overrideprotected void onDraw(Canvas canvas) {mPaint.setAntiAlias(true);//取消锯齿mPaint.setStyle(Paint.Style.FILL);mPaint.setStrokeWidth(mCircleWidth);mPaint.setColor(Color.CYAN);/*** 这是一个居中的圆*/float x = (getWidth() - getHeight() / 2) / 2;float y = getHeight() / 4;RectF oval = new RectF( x, y,getWidth() - x, getHeight() - y); canvas.drawArc(oval,360,140,true,mPaint);}
}

那么,有关于如何画圆弧的笔记就到这里了,莎哟娜啦

Android canvas.drawArc() 画圆弧相关推荐

  1. C# 已知圆心和两点,用DrawArc()画圆弧(算法)

    (本文转载自)http://www.cnblogs.com/stalwart/archive/2010/12/06/1897636.html 如题,已经知道圆心和两点,画出两点间的圆弧,思路,先分别求 ...

  2. android 按钮添加动画,Android 自定义View画出按钮加载动画~

    声明:原创作品转载请注明出处http://www.jianshu.com/p/a0ffbc04c089 看了太多别人的文章,我觉得我也应该写点什么了~一是巩固自己的知识,二是共同学习,敢说我做的不好我 ...

  3. java 画弧线,利用Android画圆弧canvas.drawArc()实例详解

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

  4. Android 画圆弧canvas.drawArc() 详解

    public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter,@NonN ...

  5. android中画弧函数canvas.drawArc()之理解

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

  6. android 画圆弧动画,『Android自定义View实战』自定义带入场动画的弧形百分比进度条...

    写在前面 这是在简书发表的处女座,这个想法也停留在脑海中很久了,一直拖到现在(懒癌发作2333),先自我介绍一番,一枚刚毕业不久的Android程序猿,初出茅庐的Android小生,之前一直在CSDN ...

  7. Android 自定义view画带指针带动画的上半圆弧刻度盘

    之前工作中有用到环形进度条等的,为了赶进度都是在网上找到相似的效果的然后再进行修改.一直都想自己画一个,今天就和大家一起来学习刻度盘的绘制. 先看一下截图: 效果演示请看 刻度盘演示 代码下载:Cal ...

  8. Android Canvas画图形(更新中)

    一.Canvas的常用操作 操作类型 相关API 备注 绘制基本形状 drawPoint, drawPoints, drawLine, drawLines, drawRect, drawRoundRe ...

  9. python绘制立体扇形_认识canvas(画扇形 动态画圆弧(requestAnimationFrame结合settimeout做的动画)、画表盘)...

    最近做的两个项目都是关于canvas的,做完整理一下,方便下一次使用,在vue里写的小demo, 功能:画扇形 动态画圆弧(requestAnimationFrame结合settimeout做的动画) ...

最新文章

  1. Dialog 带白色的边的处理方法
  2. 基于结构光测量技术和3D物体识别技术开发的机器人3D视觉引导系统
  3. 分割候选区域--FastMask: Segment Multi-scale Object Candidates in One Shot
  4. 小程序创业:新金矿、野望与焦虑
  5. js获取当前系统时间
  6. EventBus3.0源码解析
  7. 数论--康托展开与逆康托展开模板
  8. [react] 怎样将事件传递给子组件?
  9. MATLAB图自编码器
  10. 米斯特白帽培训讲义(v2)实战篇 捷达系统
  11. Linux字符串转码utf8,Linux C/C++ 字符集转换,UTF-8,GB2312
  12. VLC设置串流的TTL值
  13. 自定义可折叠和展开的View
  14. 解决three.js渲染gltf 模型与gltfViewer网站效果不一致问题 krpano发黑问题 three.js gltf模型渲染发黑问题
  15. 小程序中轻松添加日期和时间的选择
  16. 推荐Layui镜像网站
  17. 计算机无法进入增值税认证平台,增值税发票综合服务平台热点问题解答 (第三期)...
  18. 阿里云centos上处理2t3ik与ddgs病毒
  19. 一个区块链项目的40种死法 |链捕手
  20. 2.Python-简单数据类型

热门文章

  1. 高并发处理与解决方案
  2. ADS设计日志(一):阻抗变换器详讲
  3. 值得收藏的 104个 CSS 面试题
  4. ProcessDB实时/时序数据库——JAVA使用ODBC连接数据库
  5. cadence 原理图orcad使用总结篇二:FPGA/CPLD换PIN方法
  6. MySQL 的索引是如何工作的?10 分钟讲清楚!
  7. 大型网站架构模式【大型网站技术架构.核心原理与案例分析】(阅读分享)
  8. 原来微信可以这样玩!
  9. VC 6.0 好用的插件推荐
  10. Aggregation Signature for Small Object Tracking(论文翻译)