自定义控件(3)

时间:2021-08-05 20:39:25

过了个年,继续把这个系列走完自定义控件(3)

从刚开始的系列,我们提出了rect、canvas、paint等坑,这里先解释一下,分别为矩形、画布、画笔等。

paint

基本用法

// 1.创建一个画笔
private Paint mPaint = new Paint();
// 2.初始化画笔
private void initPaint() {
mPaint.setColor(Color.BLACK); //设置画笔颜色
mPaint.setStyle(Paint.Style.FILL); //设置画笔模式为填充
mPaint.setStrokeWidth(10f); //设置画笔宽度为10px
}
// 3.在构造函数中初始化(XXXView为自定义的View名称)
public XXXView(Context context, AttributeSet attrs) {
super(context, attrs);
initPaint();
}

见名知义,这里给一下画笔的各种模式

画笔模式

STROKE //描边

FILL //填充

FILL_AND_STROKE //描边加填充

Paint可以使用 Shader

但不直接用 Shader 这个类,而是用它的几个子类。具体来讲有 LinearGradient RadialGradient SweepGradient BitmapShader ComposeShader 这么几个。

LinearGradient 线性渐变

LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)

参数介绍:

x0 y0 x1 y1:渐变的两个端点的位置

color0 color1 是端点的颜色tile:端点范围之外的着色规则,类型是 TileMode。TileMode 一共有 3 个值可选: CLAMP, MIRROR 和 REPEAT。CLAMP会在端点之外延续端点处的颜色;MIRROR 是镜像模式;REPEAT 是重复模式

RadialGradient 辐射渐变

RadialGradient(float centerX, float centerY, float radius, int centerColor, int edgeColor, TileMode tileMode)

参数介绍:

centerX centerY:辐射中心的坐标

radius:辐射半径

centerColor:辐射中心的颜色

edgeColor:辐射边缘的颜色

tileMode:辐射范围之外的着色模式。

SweepGradient 扫描渐变

SweepGradient(float cx, float cy, int color0, int color1)

参数介绍:

cx cy :扫描的中心

color0:扫描的起始颜色

color1:扫描的终止颜色

BitmapShader(用 Bitmap 的像素来作为图形或文字的填充)

BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)

参数介绍:

bitmap:用来做模板的 

Bitmap 对象

tileX:横向的 TileMode

tileY:纵向的 TileMode。

ComposeShader 混合着色器

ComposeShader(Shader shaderA, Shader shaderB, PorterDuff.Mode mode)

参数介绍:

shaderA, shaderB:两个相继使用的

Shadermode: 两个 Shader 的叠加模式,即 shaderA 和 shaderB 应该怎样共同绘制。它的类型是 PorterDuff.Mode,关于这个有必要放一张经典的图了,哈哈

自定义控件(3)

画笔的setStrokeCap

Paint.setStrokeCap(cap) 可以设置点的形状,但这个方法并不是专门用来设置点的形状的,而是一个设置线条端点形状的方法。端点有圆头 (ROUND)、平头 (BUTT) 和方头 (SQUARE) 三种绘制线类似(可亲自尝试)

Paint.setStrokeJoin(Paint.Join join)可以设置拐角的形状。有三个值可以选择:MITER 尖角、 BEVEL 平角和 ROUND 圆角。默认为 MITER。

Paint.setStrokeMiter(float miter)这个方法是对于 setStrokeJoin() 的一个补充,它用于设置 MITER 型拐角的延长线的最大值

哈哈,很啰嗦的介绍了画笔的一些方法,虽然简单绘制只需要基本方法即可,但先啰嗦出来,以后肯定能用上,再详细说,本次就到这里,自定义控件(3)

下节开始结合画布,正式绘图,开启自定义控件之旅。

自定义控件(3)