问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

android canvas怎么画圆弧

发布网友 发布时间:2022-04-19 22:59

我来回答

1个回答

热心网友 时间:2022-04-20 00:29

12345

要实现这个方法,我们要传5个参数进去。
第一个参数:RectF oval
oval 参数的作用是:定义的圆弧的形状和大小的范围
/**
* 这是一个居中的圆
*/
float x = (getWidth() - getHeight() / 2) / 2;
float y = getHeight() / 4;

RectF oval = new RectF( x, y,
getWidth() - x, getHeight() - y); 1234567812345678

第二个参数:float startAngle
这个参数的作用是设置圆弧是从哪个角度来顺时针绘画的
canvas.drawArc(oval,-90,120,false,mPaint);11

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

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

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

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

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

第五个参数:Paint paint
这个参数的作用是设置我们的画笔对象的属性
mPaint.setAntiAlias(true);//取消锯齿
mPaint.setStyle(Paint.Style.FILL);//设置画圆弧的画笔的属性为描边(空心),个人喜欢叫它描边,叫空心有点会引起歧义
mPaint.setStrokeWidth(mCircleWidth);
mPaint.setColor(Color.CYAN);12341234

这里还是要强调一下,当 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);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孩子依赖性太强,妈妈怎么办?目录 孩子对妈妈依赖性太强怎么办 介绍权利的游戏里龙之母全名是什么? 澳洲血橙胶原蛋白是玻璃瓶的吗? 梦见母亲侄子妹妹舅妈电话破屋的预兆 梦见坐别人的车什么意思 有多少人去拜过“龙母”,又有几人知道“龙母”是真的存在过 龙母庙地址在哪里? 龙母像地址在哪里? 龙姥姥是龙母娘娘吗 洛奇英雄传高级裁缝工具 孟小夏谁演的 孟小夏扮演者王子文资料 关于在浙江义乌做跨境电商的前景如何?谁能提供一个好的解决方案? 锂电池隔膜厂是否要做环评? 参加义乌电子商务博览会优势! 阿里巴巴模式的相关介绍 2019年再生物资回收加工要办环评吗 义乌有多少人从事电子商务 义乌巿对电子商务的扶持政策有哪些 分析义乌跨境电子商务发展现状以及存在哪些问题 义乌市电子商务发展现状 中国大陆目前约有多少个机场? 发财树可不可以放在电视机旁养殖 2019年3月19日(农历二月十三)早上10点47分出生的男孩,姓罗,求好听打分高的名字。 男孩子处女座英文名字大全2015 新款雪纺碎花连衣裙简单大气。这样说对不对呢? 在女儿红的场上说花雕酒会不会被打死? 白棕条纹连衣裙,优雅清新,你觉得这样的裙子惊艳吗? 古代时,女儿嫁出去了喝女儿红,如果自己的女儿嫁不出去,成老姑娘,应该喝什么酒?? 二十岁左右男人长期喝啤酒会造成那些危害? 剪刀是哪个国家发明的? 模拟人生3任务获得裁缝工具箱怎么做 洛奇 杂货店兼职任务问题 义乌B2B电子商务市场现状级发展前景 即日启程中小夏的扮演者 建议网高是什么意思 HP cq45 147TX与投影仪信号连接的切换键是什么,但是不是FN+F4 高质量是什么意思 成长手册家长寄语怎么写? 我的是惠普HSTNN-C51C笔记本怎么连接夏普XG-FX8205A投影仪,按FN+F4无反应 高质量交友是什么意思 高质量+nss+cqy+(死人勿扰)是什么意思? 高质量回答是什么意思啊 qq绝对高质量什么意思? 智慧餐厅系统开发有什么价值? 高质量三拒什么意思 什么是智慧餐饮管理系统 责怪的意思 在体重称显示四十八公斤左右的体重,真实的。谢谢了 智慧餐厅方案怎么做