#一、描述 此文章介绍自定义控件。
#二、自定义控件
####(一)View方法
测量View大小/*** MeasureSpec有三个常量:* (1)MeasureSpec.EXACTLY:精确数值模式,例如layout_width="50dp" 或者充满父容器layout_width="match_parent"* (2)MeasureSpec.AT_MOST :自适应模式,例如layout_width="wrap_content"* (3)MeasureSpec.UNSPECIFIED:未指明大小模式,随意设置大小*/@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); }复制代码
####(二)相关API
####画笔Paint paint = new Paint();paint.setColor(Color.RED); //设置画笔颜色paint.setStrokeWidth(5); //设置画笔粗细paint.setTextSkewX(4); //设置倾斜,负右斜,正为左paint.setARGB(1, 1, 1, 1); //设置颜色,a为透明度paint.setTextSize(15); //设置文字大小paint.setFakeBoldText(true); //是否粗体paint.setTextAlign(Paint.Align.CENTER); //设置文字对齐方式,LEFT,CENTER,RIGHTpaint.setUnderlineText(true); //设置下划线paint.setStyle(Paint.Style.FILL); //设置画笔样式,FILL,STROKE,FILL_AND_STROKEpaint.setTypeface(Typeface.DEFAULT_BOLD); //设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等paint.setDither(true); //设置抖动处理paint.setAlpha(3); //设置透明度paint.setAntiAlias(true); //是否开启抗锯齿paint.setFilterBitmap(true); //是否开启优化Bitmappaint.setColorFilter(new ColorFilter()); //设置颜色过滤paint.setMaskFilter(new MaskFilter()); //设置滤镜的效果paint.setShader(new Shader()); //设置图像渐变效果paint.setStrokeJoin(Paint.Join.MITER); //设置图像结合方式paint.setXfermode(new Xfermode()); //设置图像重叠效果paint.setPathEffect(new PathEffect()); //设置路径效果paint.reset(); //恢复默认设置复制代码
####绘制圆形
//cx:圆心的x坐标,就是距离左边多少距离//cy:圆心的y坐标,就是距离上边多少距离//radius:圆的半径,就是圆形的半径多长//paint:绘制时所使用的画笔。canvas.drawCircle(150, 150, 100,paint);复制代码
####绘制线条
//startX StartY StopX StopY Paint 5个参数,分别代表起点x坐标,起点y坐标,终点x和终点y canvas.drawLine(0, 50, 300, 50, paint);复制代码
####绘制矩形
//参数分别为left top right botton , left 和 top 确定这个矩形的起点x和y坐标,而right和botton是确定这个矩形的宽和高,也可以说是终点的x坐标和y坐标 Rect rect = new Rect(50, 50, 200, 200); canvas.drawRect(rect, paint);复制代码
就比如下面这个示例,这就是left是100,top也是100,确定xy的起始坐标点,而right的300和botton的300,就是right距离左边300,botton距离上边300.
####绘制圆角矩形
//矩形上面已经介绍过了,圆角矩形多了两个参数,就是圆角的度数,50,50RectF rect_round = new RectF(200, 200, 400, 400);canvas.drawRoundRect(rect_round, 50, 50, paint);复制代码
####绘制圆环
/*** RectF 圆环大小* float startAngle 起点的角度* float sweepAngle 需要划动多少角度* boolean useCenter 是否显示连接线* Paint paint 画笔 */ canvas.drawArc(rectF, 0, 180, false, paint);复制代码
下面的图片已经标明了,起点0度开始进行划动,顺时针的根据参数进行划动180度,如果需要起点从其他位置开始,可以把起点0改成其他的度数。
####绘制路径
// 1 moveTo方法是起始点,默认为(0,9)// 2 linTo方法是连接点 Path path = new Path(); path.moveTo(100, 100); path.lineTo(200, 60); path.lineTo(200, 150); path.lineTo(300, 150); path.lineTo(300, 200); path.lineTo(100, 200); path.lineTo(100, 100); canvas.drawPath(path, new Paint());复制代码
Note:Rect 和 RectF的区别?就是Rect是Integer类型,而RectF是float类型的
####(二)示例
TextView边框自定义示例:
Paint paint = new Paint();p.setStyle(Paint.Style.STROKE); //设置为空心p.setStrokeWidth(5); //设置外框线的宽度p.setColor(Color.YELLOW); //设置线的颜色/*** 绘制矩形,起始x坐标,起始y坐标,终点x坐标,终点y坐标,用来绘画的paint.xy的起点是在左上角的0,0 */canvas.drawRect(0f, 0f, getMeasuredWidth(), getMeasuredHeight(), paint);super.onDraw(canvas);复制代码