利用Android画圆弧canvas.drawArc()实例详解
作者:艾阳丶 时间:2022-05-21 08:45:54
前言
在学习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
这个参数的作用是设置我们的画笔对象的属性
//当我们设置为true的时候,绘制的时候就经过圆心了
canvas.drawArc(oval,360,140,true,mPaint);
这里还是要强调一下,当 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();
}
@Override
protected 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);
}
}
来源:http://blog.csdn.net/csdn_aiyang/article/details/71616979
标签:android,canvas.drawArc(),画圆弧
0
投稿
猜你喜欢
Java Springboot整合支付宝接口的教程详解
2023-11-06 19:41:49
初识Spring Boot框架和快速入门
2022-10-17 00:58:52
Struts2+uploadify多文件上传实例
2023-03-19 07:53:35
java ThreadPoolExecutor线程池拒绝策略避坑
2021-09-05 08:39:52
Java实现Flappy Bird游戏源码
2022-11-02 16:55:29
Android游戏开发 自定义手势--输入法手势技术
2021-08-01 07:52:12
C#编写一个网游客户端的完整步骤
2021-11-27 03:57:47
关于MD5算法原理与常用实现方式
2023-03-18 11:09:04
Android沉浸式状态栏的实现代码
2023-08-21 05:52:08
spring-boot中使用spring-boot-devtools的实现代码
2021-10-09 13:31:32
Java实战之制作在线音乐网站
2021-11-11 01:36:02
IDEA插件EasyCode及MyBatis最优配置步骤详解
2023-11-09 03:19:19
MyBatis 如何获取子类的属性
2022-09-12 14:42:39
Java读写文件创建文件夹多种方法示例详解
2022-11-17 01:08:48
Java实现简单猜拳游戏
2023-05-27 18:28:16
Java开发之Lombok指南
2022-11-19 21:49:28
Spring Boot Debug调试过程图解
2023-12-13 10:27:33
SpringBoot教程_创建第一个SpringBoot项目
2022-02-19 23:12:54
Spring学习通过AspectJ注解方式实现AOP操作
2023-09-22 22:09:44
解决IDEA导入javaWeb项目注解爆红的问题
2021-08-07 13:42:02