利用Android画圆弧canvas.drawArc()实例详解
程序员文章站
2022-05-15 22:47:22
前言
在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawarc()的用法、参数含义及画图原理很是不理解,在网上搜索了一些,加上自己的...
前言
在学习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); } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。