android自定义圆弧刻度

一直对于自定义view只是囫囵吞枣,拿人代码就用,很少研究,最近项目需要这个效果图:

android自定义圆弧刻度_第1张图片
项目效果图

关于上方的圆弧,自定义一下。对于自定义view:

1,onMeasure方法:作用是计算各控件的大小。系统在渲染页面时会调用各view的onMeasure方法,各控件的onMeasure方法执行顺序是从内到外,即先调用子控件的onMeasure方法,在执行父布局的onMeasure方法。

2,onLayout方法:根据获取到的尺寸信息渲染这个view。onMeasure方法执行完后会回调onLayout方法。onSizeChanged方法执行完也会回调onLayout方法。执行顺序也是从内到外,即先调用子控件的onLayout方法,在执行父布局的onLayout方法。

removeView(): 子onMeasure --> 父onMeasure -->子onLayout-->父onLayout

addView():子onMeasure --> 父onMeasure -->子onLayout-->父onLayout

3,onDraw()方法:绘制view:

关于绘制view,需要用到的一些类:(只介绍目前我项目中用到的):

Paint:画笔(很好理解,把view当作要画的画,这个就是画画所需要的画笔),一些属性设置

mArcBgPaint=newPaint();//实例化

mArcBgPaint.setAntiAlias(true);//抗锯齿

mArcBgPaint.setStyle(Paint.Style.STROKE);//设置样式,系统提供了3种:Paint.Style.STROKE:只画描边,Paint.Style.FILL:只画内部,Paint.Style.FILL_AND_STROKE:描边和内部都画

mArcBgPaint.setStrokeWidth(mArcWidth);//设置描边的宽度

mArcBgPaint.setColor(mArcBgColor);//设置画笔颜色

mArcBgPaint.setStrokeCap(Paint.Cap.ROUND);//该方法用来设置我们画笔的 笔触风格 ,比如:ROUND,表示是圆角的笔触。那么什么叫笔触呢,其实很简单,就像我们现实世界中的笔,如果你用圆珠笔在纸上戳一点,那么这个点一定是个圆,即便很小,它代表了笔的笔触形状,如果我们把一支铅笔笔尖削成方形的,那么画出来的线条会是一条弯曲的“矩形”,这就是笔触的意思。除了ROUND,Paint.Cap还提供了另外两种类型:SQUARE和BUTT

LinearGradient gradient =newLinearGradient(0,0,mScressWidth-2*mPdDistance,mScressWidth-2*mPdDistance,mArcForeEndColor,mArcForeStartColor,Shader.TileMode.CLAMP);

mArcForePaint.setShader(gradient);//设置圆弧渐变。

关于更多的set设置属性,查找api文档。

有了画笔,我们画画还需要画布,在自定义view种,在ondraw()方法中,Canvas这个类就是画布,提供了一系列画图的方法,当然也可以设置很多属性:

canvas.drawArc(new Recf(0,0,128,128),0,270, false,mArcBgPaint);画圆,1:圆的范围大小

参数2:起始角度,参数3:圆心角角度,360为圆,180为半圆,参数4:useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。参数5:画笔。

canvas.drawText(“哈哈,70,80,paint):画文字:参数1:文字内容,参数2:文字的x坐标,参数3:文字的y坐标,参数4:画文字的画笔。

关于画布提供的还有很多:如drawLine(画直线),drawRoundRect方法:绘制圆角矩形,目前我只用到这些。

好啦,关于自定义我觉得还是数学要好啊,计算的东西太多啦,写文章记录一下,代码中有错误希望看到的人可以指出联系我:[email protected].

源码地址:github.com/daoxiaomianzi/CircleProgress

2017.7.19更新:

一:RectF和Rect的联系和区别:

1. 联系:

都是用于表示坐标系中的一块矩形区域,并可以对其做一些简单操作。这块矩形区域,需要用左上和右下两个坐标点表示。

2. 区别:

(1).精度不一样。Rect是使用int类型作为数值,RectF是使用float类型作为数值。RectF的精度更高一点。

(2).两个类型提供的方法也不是完全一致。

RectF rectF=new RectF();//构造

rectF.inset(10,10);//设置矩形的宽度

二:

1:canvas.drawRect():绘制直角矩形,这个方法有3种参数设置。1:传rectf和paint参数。2:传rect和paint参数。3:传left,top,right,bottom,paint,参数1-4:,其实就是rectf的左上和右下2个坐标点。参数5:画笔

2:canvas.drawCircle(400,400,100,mArcForePaint):画圆,参数1:圆心的x坐标,参数2:圆心的y坐标,参数3:圆的半径,参数4:画笔。

3:canvas.drawColor(Color.TRANSPARENT):给画布设置背景颜色。参数:颜色

4:canvas.drawLine(100,100,400,400,mArcBgPaint):画直线。参数1:直线的开始x坐标,参数2:直线的开始y坐标,参数3:直线的结束x坐标,参数4:直线的结束y坐标,参数5:画笔。

5:canvas.drawPoint(500,500,mArcBgPaint):画点:参数1:点的x坐标,参数2:点的y坐标,参数3:画笔。

你可能感兴趣的:(android自定义圆弧刻度)