Android开发学习笔记——自定义View(二)自定义View绘图
在Android开发中,如果我们想要实现更加复杂和绚丽的界面效果,我们不能仅仅了解Android提供的系统组件,还需要学习自定义View来创建自己想要的效果。在实际开发中,自定义View通常包括了自定义组合控件,方便复用;继承系统组件扩展功能以及最灵活、实现效果最复杂的继承View来绘制组件几种方式。前两种方式由于复用了系统组件的功能,因此实现起来相对方便,快捷,但同时也限制了其灵活性,如果我们想要开发一个完全自由的组件,优秀的自定义View,通常我们需要直接继承自View,手动实现其Mesure、Layout和Draw过程。其中Draw过程是最重要的,这最终决定了自定义View的样子,具体实现就是通过绘图的方式来实现onDraw方法。
坐标系
要学习View绘图的相关知识,首先,我们需要学习在Android系统中的相关坐标系。在Android系统中,坐标系是以左上角为原点,竖直向下方向为y轴正方向、水平向右为x轴正方向的,而View的位置主要是由其四个顶点来决定的,分别对应于View的四个属性:top、left、right和bottom。其中,top为view左上顶点的y轴坐标,left为view左上顶点的x轴坐标,right为view右下顶点的x轴坐标,bottom为view右下顶点的y轴坐标。值得注意的是,这四个坐标都是相对于view的父容器的坐标。具体如下图所示:

通过上图,我们可以了解到View的宽高和坐标系的关系:
width = right-left
height = bottom-top
Paint和Canvas
自定义View的实现方式主要就是通过实现onDraw方法,在onDraw方法中绘制对应的View,而绘制的主要方法就是通过Paint和Canvas两个类,其中Canvas就相当于画布,Paint相当于画笔,就好像画画一样,通过利用画笔在画布上画画就可以得到我们想要的View。
Paint
Paint在绘制过程中就相当于画笔,和画画一样,在绘制前我们需要为“画笔”设置好其颜色、粗细等属性,其基本的方法如下所示:
| 方法 | 说明 |
|---|---|
| setAntiAlias | 设置是否抗锯齿 |
| setARGB/setColor | 设置颜色 |
| setAlpha | 设置透明度 |
| setDither | 设置是否使用图像抖动,会使图像更加清晰饱满 |
| setStrokeWidth | 设置画笔粗细 |
| setShadowLayer | 设置阴影 |
| setStyle | 设置填充样式 |
| setStrokeCap | 设置端点样式 |
| setStrokeJoin | 设置线段连接处样式 |
| setXfermode | 设置图像重叠处理 |
| setMaskFilter | 设置滤镜效果 |
| setColorFilter | 设置颜色过滤 |
| reset | 重置画笔所有设置 |
对于Paint,我们所需要的就是设置好各种属性,为之后绘制图形做好准备工作,我们只需要调用相应的方法即可。
setStyle
对于setStyle方法,主要存在三种填充样式,如下:
- Paint.Style.FILL:填充
- Paint.Style.STROKE:描边
- Paint.Style.FILL_AND_STROKE:填充且描边
代码如下:
mPaint.style = Paint.Style.STROKE//描边
canvas?.drawCircle(400f, 400f, 200f, mPaint)
mPaint.style = Paint.Style.FILL//填充
canvas?.drawCircle(400f, 800f, 200f, mPaint)
mPaint.style = Paint.Style.FILL_AND_STROKE//描边并填充
canvas?.drawCircle(400f, 1210f, 200f, mPaint)
具体实现效果如下图:

从上图,我们可以清楚的看到Paint.Style.STROKE和其它两个样式的区别,那么Paint.Style.FILL和Paint.Style.FILL_AND_STROKE又有什么区别呢?我们将两者重叠,就会发现,其实Paint.Style.FILL_AND_STROKE是在Paint.Style.FILL的基础上加上了一个描边,因此实际上是略大的,在实际开发中我们一般使用填充样式即可,如下图:

setsetStrokeCap
setStrokeCap方法的作用为设置线两端的样式,包括以下几种样式:
- Paint.Cap.BUTT:默认实现,无线帽
- Paint.Cap.ROUND:圆形线帽,即线两端为圆角
- Paint.Cap.SQUARE:方形线帽,即线两端为方形
我们绘制几条线,分别展示三种样式:
mPaint.strokeCap = Paint.Cap.BUTT//默认无
canvas?.drawLine(200f,200f,800f,200f, mPaint)
mPaint.strokeCap = Paint.Cap.SQUARE//方形
canvas?.drawLine(200f,300f,800f,300f, mPaint)
mPaint.strokeCap = Paint.Cap.ROUND//圆角
canvas?.drawLine

本文详细介绍了Android自定义View的绘图知识,包括坐标系、Paint和Canvas的使用,如设置线条样式、线帽、线段连接处样式、图像混合模式。还讲解了Canvas的裁剪、变换以及Path的绘制,如绘制不规则图形。了解这些知识点能帮助开发者实现更复杂的界面效果。
最低0.47元/天 解锁文章
419

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



