全网最好看的自定义View教程,不接受反驳!

全网最好看的自定义View教程,不接受反驳!

码个蛋(codeegg)第 745 次推文

作者: 灯不利多

原文: https://juejin.im/post/5d61514df265da03d60f0ab6

本文主要讲Android绘图基础哈~

这次的包含内容如下。

  • 画笔用法

  • 画布用法

  • 颜色构造

1. 画笔用法

我们这一节来看一下画笔的用法。

本节包含内容如下。

  • 设置画笔颜色

  • 设置画笔样式

  • 设置画笔宽度

  • 设置画笔锯齿

1.1 设置画笔颜色

全网最好看的自定义View教程,不接受反驳!

Paint 的 setColor(int color) 方法可用于设置画笔颜色,下面是 color 参数的取值。

一种颜色是由红绿蓝三色合成的,所以 color 只能取 8 位 0xAARRGGBB 样式颜色值。

  • 透明度

    A 表示透明度 Alpha,取值范围是 0~255,值越小,图像越透明

  • 红色

    R 表示红色 Red,取值范围是 0~255,取值越小红色越少

  • 绿色

    G 表示绿色 Green,取值范围是 0~255,取值越小绿色越少

  • 蓝色

    B 表示蓝色 Blue,取值范围是 0~255,取值越小蓝色越少

除了手动组合颜色,系统还提供了一个用于解析颜色的类 Color,关于 Color 在后面会有更详细的介绍。

1.2 设置画笔样式

全网最好看的自定义View教程,不接受反驳!

Paint 的 setStyle(Style style) 方法可用于设置画笔样式,下面是 style 参数的取值。

  • 描边

    • STROKE

  • 填充

    默认样式。

    • FILL

  • 描边且填充

    描边与填充叠加在一起显示的效果,也就是这个值比填充多了一个描边的宽度。

    • FILL_AND_STROKE


1.3 设置画笔宽度

Paint 的 setStrokeWidth(width) 方法用于设置描边宽度,单位是 px。

  • 注意事项

    当画笔的 Style 是 STROKE 或 FILL_AND_STROKE 时画笔宽度才有意义。


1.4 设置画笔锯齿

画笔 Paint 绘制图形时默认不是抗锯齿的,也就是边边会有锯齿。

Paint 提供了 setAntiAlias() 方法,这个方法可以开启画笔的抗锯齿功能。

下面是两个放大后的圆,右边的圆用的是抗锯齿的画笔绘制的。

全网最好看的自定义View教程,不接受反驳!

2 画布用法

上一节演示画笔的同时也演示了画布绘制圆的方法,这一节我们来看一下画布的其他方法。

本节内容如下。

  • 设置背景

  • 绘制直线

  • 绘制点

  • 矩形结构

  • 绘制矩形

  • 圆角矩形


2.1 设置背景

Canvas 提供了三个设置背景的方法。

  • drawColor(int color)

  • drawARGB(int a, int r, int g, int b)

  • drawRGB(int r, int g, int b)

需要注意的是,设置画布背景要在其他图形绘制前设置,否则设置好的背景色会覆盖原有的图形。

全网最好看的自定义View教程,不接受反驳!

2.2 绘制直线

全网最好看的自定义View教程,不接受反驳!

Canvas 的 drawLine() 方法可以绘制直线,直线的粗细取决于 Paint 的 setStrokeWith(width) 中传入的宽度。

绘制直线需要注意的是,只有当 Style 是 STROKE、FILL_AND_STROKE 时绘制才有效。

  • drawLine(float startX, float starY, float stopX, float stopY, Paint paint)


2.3 绘制点

全网最好看的自定义View教程,不接受反驳!

Canvas 的 drawPoint() 方法可以用于绘制点,点的大小取决于 setStrokeWith(width) 中传入的宽度。

  • drawPoint(float x, float y, Paint paint)


2.4 矩形结构

矩形结构在绘制矩形区域的时候需要用到。

Android 提供了 Rect 和 RectF 类用于存储矩形数据结构,下面是 Rect 和 RectF 的构造函数。

全网最好看的自定义View教程,不接受反驳!

Rect 和 RectF 在于存储的数据类型不同。

  • Rect

    用于保存 int 类型数值的矩形结构

  • RectF

    用于保存 float 类型数值的矩形结构


2.5 绘制矩形

全网最好看的自定义View教程,不接受反驳!

Canvas 的 drawPoint() 和 drawRect() 方法都可用于绘制矩形。

下面是这两个方法的区别。

  • 形状

    • drawPoint()

      只能指定矩形中心的坐标,只能画出正方形。

    • drawRect()

      需要指定矩形左上和右下两个点的位置,可以是长方形。

  • 样式

    • drawPoint()

      只能是填充样式。

    • drawRect()

      可以自己选择样式,可以是描边也可以是填充。

下面是 Canvas 中提供用于绘制矩形的三个方法。

  • drawRect(float left, float top, float right, float bottom, Paint paint)

  • drawRect(RectF rect, Paint paint)

  • drawRect(Rect r, Paint paint)


2.6 圆角矩形

Canvas 中提供了一个 drawRoundRect 方法用于绘制圆角矩形,圆角矩形的四个角是椭圆的一角,下面是它的基本用法。

全网最好看的自定义View教程,不接受反驳!

3 颜色构造


Color 类是 Android 中与颜色有关的类。

本节内容如下。

  • 颜色常量

  • 构造颜色


3.1 颜色常量

Color 中定义了下面的颜色常量值。

全网最好看的自定义View教程,不接受反驳!

3.2 构造颜色

除了颜色常量外,Color 还提供了一些构造颜色的方法。

全网最好看的自定义View教程,不接受反驳!

alpha << 就是进 24 位,当我们调用 Color.argb(255, 0, 0,0 0) 时,转换后的 16 进制颜色值就是 0xFF000000。

全网最好看的自定义View教程,不接受反驳!

近期文章:

日问题:

你画得怎样?

专属升级社区:《这件事情,我终于想明白了》 

全网最好看的自定义View教程,不接受反驳!