利用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);

利用Android画圆弧canvas.drawArc()实例详解第二个参数:float startAngle

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


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

利用Android画圆弧canvas.drawArc()实例详解


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

利用Android画圆弧canvas.drawArc()实例详解


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

利用Android画圆弧canvas.drawArc()实例详解


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

利用Android画圆弧canvas.drawArc()实例详解

第三个参数: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);//画矩形

利用Android画圆弧canvas.drawArc()实例详解


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

利用Android画圆弧canvas.drawArc()实例详解

第五个参数: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
  • asp之家 软件编程 m.aspxhome.com