如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。那么下面我们就来依次学习一下,每种方式分别是如何自定义View的。
一、自绘控件
自绘控件的意思就是,这个View上所展现的内容全部都是我们自己绘制出来的。绘制的代码是写在onDraw()方法中的.
在做自绘控件的之前,我们先来了解一下Canvas 这个类 的常用的几个方法:
canvas.drawRect(left, top, right, bottom, paint);绘制矩形
paint.setColor(Color.RED);
paint.setStyle(Style.STROKE);
//绘制矩形
canvas.drawRect(100, 50, 200, 100, paint);
<span style="white-space:pre"> </span> paint.setColor(Color.RED);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
/*绘制圆形
* cx 为中心横坐标
* cy 为中心纵坐标
* radius 为半径
* */
<span style="white-space:pre"> </span>canvas.drawCircle(75, 150, 50, paint);
canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint):绘制弧形
paint.setColor(Color.RED);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
/* 绘制弧形
RectF 用来绘制圆弧的矩形区域
当RecF 只有当绘制的矩形为 正方形 的时候,则绘制出来的弧形为圆形或扇形
绘制圆弧的时候
圆心坐标(centerX,centerY): RecF矩形的中心点
半径 radio: RecF矩形的边长
startAngle: 圆弧角度的起始线, 以矩形的水平分割线的右边为基准 >0 顺时针,<0 逆时针
sweepAngle 圆弧角度的摆动线 ,以 startAngle起始线 为基准 >0 顺时针,<0 逆时针
useCenter 如果 为true 圆弧中心角度扫描的边界线将会被绘制出来,如果为false则表示 圆弧中心角度扫描的边界线将不会被绘制出来 */
<span style="white-space:pre"> </span>canvas.drawArc(new RectF(20, 20, 200, 200), -20, -20, true, paint);
drawRoundRect(RectF rect, float rx, float ry, Paint paint) :绘制圆角矩形
<span style="white-space:pre"> </span> paint.setColor(Color.RED);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
/*
*绘制圆角矩形
* RectF 绘制矩形区域
* rx : x方向的圆角坐标
* ry : y方向的圆角坐标
*/
/*setARGB(int a,int r,int g,int b);
* 设置绘制的颜色,a代表透明度,a: 0-255 透明度递减 ,(256,257)完全透明,
* r,g,b代表颜色值。
*/
paint.setARGB(250,250,0,0);
//设置锯齿 true: 绘制锯齿 false :不绘制锯齿(使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢)
paint.setAntiAlias(false);
//是否设置图像的抖动,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰
paint.setDither(true);
canvas.drawRoundRect(new RectF(50, 50, 350, 350), 50, 50, paint);
canvas.drawLine(startX, startY, stopX, stopY, paint):绘制直线
paint.setColor(Color.RED);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
/*
*绘制直线
* (startX,startY)为直线的起始点坐标
* (stopX,stopY) 为直线的终点坐标
*/
canvas.drawLine(10, 150, 150, 150, paint);
drawOval(RectF oval, Paint paint):绘制椭圆
paint.setColor(Color.RED);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
/*
* 绘制椭圆
* RectF : 为要绘制椭圆的矩形区域
* 绘制的椭圆 一定要 与矩形的四条边有接触 ,所以可以在矩形中绘制椭圆
*/
canvas.drawOval(new RectF(50, 50, 500, 500), paint);
canvas.drawText(text, x, y, paint):绘制文本
paint.setColor(Color.RED);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
canvas.drawText("你好", 10, 50, paint);
相关文章链接:点击打开链接
有关继承自定义View的实现:android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
本文详细介绍了自定义View中的自绘控件实现方式,包括使用Canvas类的常用方法如drawRect、drawCircle、drawArc、drawRoundRect、drawLine、drawOval和drawText进行图形绘制。

被折叠的 条评论
为什么被折叠?



