通常情况下,有以下三种方法来实现自定义控件:
- 对现有控件进行拓展
- 通过组合来实现新的控件
- 重写view来实现全新的控件
RectF arcRectF=new RectF(
(float) (length*0.1),
(float) (length*0.1),
(float) (length*0.9),
(float) (length*0.9));
RectF构造函数为(float left,float top,float right,float bottom);
二维坐标为弧形的外接矩形
Paint.setStyle(…);
- Paint.Style.STROKE:只绘制图形轮廓(描边)
- Paint.Style.FILL 只绘制图形内容
- Paint.Style.FILL_AND_STROKE 既绘制轮廓也绘制内容
//绘制圆
canvas.drawCircle(circleXY,circleXY,radius,circlePaint);
//圆心的X坐标,圆心的Y坐标,半径,画笔对象的属性
//绘制弧线
canvas.drawArc(arcRectF,270,sweepAngle,false,arcPaint);
//RectF oval:圆弧的形状和大小的范围,
//float startAngle:圆弧是从哪个角度来顺时针绘画的
//float sweepAngle:设置圆弧扫过的角度
//boolean useCenter:设置圆弧在绘画的时候,是否经过圆形
//Paint paint 画笔对象的属性
//绘制文字
canvas.drawText(showText,0,showText.length(),circleXY,circleXY+(showTextSize/4),textPaint);
//float y为baseline(基线)
int specMode=MeasureSpec.getMode(measureSpec);
- MeasureSpec.AT_MOST:最大值模式,指定为warp_parent,控件大小随着控件的子控件大小或内容的变化而变化
- MeasureSpec.EXACTLY精确值模式,指定为具体数值或math_parent时使用的是此模式
- MeasureSpec.UNSPECIFIED不指定其大小测量模式,通常情况下在绘制自定义view时才会使用
//渐变渲染器
LinearGradient linearGradient=new LinearGradient(0,0,viewWidth,0,new int[]{Color.BLUE,0xfffff000,Color.GREEN}, null, Shader.TileMode.REPEAT);
- Shader.TileMode.REPEAT:表示,当我们绘制的图形尺寸大于Bitmap尺寸时,会用Bitmap重复平铺整个绘制的区域。
- Shader.TileMode.CLAMP表示,当所画图形的尺寸大于Bitmap的尺寸的时候,会用Bitmap四边的颜色填充剩余空间。
- Shader.TileMode.MIRROR与Shader.TileMode.REPEAT类似,当绘制的图形尺寸大于Bitmap尺寸时,MIRROR也会用Bitmap重复平铺整个绘图区域,与REPEAT不同的是,两个相邻的Bitmap互为镜像。