Android canvas.drawArc() 画圆弧
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() 画圆弧相关推荐
- C# 已知圆心和两点,用DrawArc()画圆弧(算法)
(本文转载自)http://www.cnblogs.com/stalwart/archive/2010/12/06/1897636.html 如题,已经知道圆心和两点,画出两点间的圆弧,思路,先分别求 ...
- android 按钮添加动画,Android 自定义View画出按钮加载动画~
声明:原创作品转载请注明出处http://www.jianshu.com/p/a0ffbc04c089 看了太多别人的文章,我觉得我也应该写点什么了~一是巩固自己的知识,二是共同学习,敢说我做的不好我 ...
- java 画弧线,利用Android画圆弧canvas.drawArc()实例详解
前言 在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawArc()的用法.参数含义及画图原理很是不理解,在网上搜索了一些,加上自己的理解,在此做个小总结,下面来一 ...
- Android 画圆弧canvas.drawArc() 详解
public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter,@NonN ...
- android中画弧函数canvas.drawArc()之理解
在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawArc()的用法.参数含义及画图原理很是不理解,在网上搜索了一些,加上自己的理解,在此做个小总结,作为学习过程中 ...
- android 画圆弧动画,『Android自定义View实战』自定义带入场动画的弧形百分比进度条...
写在前面 这是在简书发表的处女座,这个想法也停留在脑海中很久了,一直拖到现在(懒癌发作2333),先自我介绍一番,一枚刚毕业不久的Android程序猿,初出茅庐的Android小生,之前一直在CSDN ...
- Android 自定义view画带指针带动画的上半圆弧刻度盘
之前工作中有用到环形进度条等的,为了赶进度都是在网上找到相似的效果的然后再进行修改.一直都想自己画一个,今天就和大家一起来学习刻度盘的绘制. 先看一下截图: 效果演示请看 刻度盘演示 代码下载:Cal ...
- Android Canvas画图形(更新中)
一.Canvas的常用操作 操作类型 相关API 备注 绘制基本形状 drawPoint, drawPoints, drawLine, drawLines, drawRect, drawRoundRe ...
- python绘制立体扇形_认识canvas(画扇形 动态画圆弧(requestAnimationFrame结合settimeout做的动画)、画表盘)...
最近做的两个项目都是关于canvas的,做完整理一下,方便下一次使用,在vue里写的小demo, 功能:画扇形 动态画圆弧(requestAnimationFrame结合settimeout做的动画) ...
最新文章
- Dialog 带白色的边的处理方法
- 基于结构光测量技术和3D物体识别技术开发的机器人3D视觉引导系统
- 分割候选区域--FastMask: Segment Multi-scale Object Candidates in One Shot
- 小程序创业:新金矿、野望与焦虑
- js获取当前系统时间
- EventBus3.0源码解析
- 数论--康托展开与逆康托展开模板
- [react] 怎样将事件传递给子组件?
- MATLAB图自编码器
- 米斯特白帽培训讲义(v2)实战篇 捷达系统
- Linux字符串转码utf8,Linux C/C++ 字符集转换,UTF-8,GB2312
- VLC设置串流的TTL值
- 自定义可折叠和展开的View
- 解决three.js渲染gltf 模型与gltfViewer网站效果不一致问题 krpano发黑问题 three.js gltf模型渲染发黑问题
- 小程序中轻松添加日期和时间的选择
- 推荐Layui镜像网站
- 计算机无法进入增值税认证平台,增值税发票综合服务平台热点问题解答 (第三期)...
- 阿里云centos上处理2t3ik与ddgs病毒
- 一个区块链项目的40种死法 |链捕手
- 2.Python-简单数据类型