在自定义控件的绘图篇中,Paint
类是核心的组成部分之一,它控制了在 Canvas
上绘制的内容的各种属性,包括颜色、风格、抗锯齿、透明度等等。下面将详细介绍 Paint
的主要功能以及如何使用 ColorMatrix
和 setColorFilter
来实现滤镜效果。
Paint 函数大汇总
Paint
类提供了丰富的功能,下面是一些常用的方法及其用途:
-
构造函数:
Paint()
: 创建一个新的Paint
对象,所有设置均为默认值。
-
样式设置:
setStyle(Paint.Style style)
: 设置绘图风格,如FILL
(填充)、STROKE
(描边)、FILL_AND_STROKE
(填充和描边)。setColor(int color)
: 设置绘图的颜色。setStrokeWidth(float width)
: 设置描边宽度。setStrokeCap(Paint.Cap cap)
: 设置描边端点的形状,如ROUND
、BUTT
或SQUARE
。setStrokeJoin(Paint.Join join)
: 设置描边线条连接处的形状,如ROUND
、MITER
或BEVEL
。setAntiAlias(boolean aa)
: 设置是否启用抗锯齿。
-
透明度设置:
setAlpha(int alpha)
: 设置整体的透明度(0-255)。setARGB(int a, int r, int g, int b)
: 直接设置颜色的 Alpha、Red、Green 和 Blue 组件。
-
文字设置:
setTextSize(float size)
: 设置文字大小。setTypeface(Typeface tf)
: 设置字体。setTextAlign(Paint.Align align)
: 设置文字对齐方式。
-
滤镜效果:
setColorFilter(ColorFilter cf)
: 应用颜色过滤器。setShader(Shader shader)
: 应用着色器。setXfermode(Xfermode mode)
: 设置混合模式。
-
图像质量:
setDither(boolean dither)
: 设置是否启用抖动以提高图像质量。setFilterBitmap(boolean filter)
: 设置是否启用位图滤波器。
Paint 之 ColorMatrix 与滤镜效果
ColorMatrix
是一种强大的工具,用于修改颜色矩阵,可以实现各种色彩变换和滤镜效果。ColorMatrix
可以通过 ColorMatrixColorFilter
应用于 Paint
中。
下面是如何创建一个简单的灰度滤镜的例子:
Java
1ColorMatrix colorMatrix = new ColorMatrix();
2colorMatrix.setSaturation(0); // 将饱和度设置为0,转换为灰度
3ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
4paint.setColorFilter(colorFilter);
Paint 之 setColorFilter
setColorFilter
方法允许你为 Paint
设置颜色过滤器,从而在绘制时应用各种颜色效果。除了使用 ColorMatrixColorFilter
外,还可以使用其他类型的 ColorFilter
,例如 LightingColorFilter
和 PorterDuffColorFilter
。
使用 LightingColorFilter 实现亮度和对比度调整:
Java
1paint.setColorFilter(new LightingColorFilter(0xFF993300, 100));
这里的 0xFF993300
是最终的颜色,而 100
表示对比度因子。
使用 PorterDuffColorFilter 实现背景颜色替换:
Java
1paint.setColorFilter(new PorterDuffColorFilter(0xFFFF00FF, PorterDuff.Mode.SRC_IN));
示例代码
下面是一个使用 Paint
和 ColorMatrix
实现简单灰度滤镜效果的示例代码:
Java
1public class CustomView extends View {
2 private Paint paint;
3 private Bitmap bitmap;
4 private Canvas canvas;
5 private Bitmap.Config conf = Bitmap.Config.ARGB_8888;
6
7 public CustomView(Context context) {
8 super(context);
9 init();
10 }
11
12 private void init() {
13 paint = new Paint();
14 bitmap = Bitmap.createBitmap(300, 300, conf);
15 canvas = new Canvas(bitmap);
16 drawSomethingOnCanvas(canvas);
17
18 ColorMatrix cm = new ColorMatrix();
19 cm.setSaturation(0);
20 ColorMatrixColorFilter filter = new ColorMatrixColorFilter(cm);
21 paint.setColorFilter(filter);
22 }
23
24 @Override
25 protected void onDraw(Canvas canvas) {
26 super.onDraw(canvas);
27 canvas.drawBitmap(bitmap, 0, 0, paint);
28 }
29}
在这个例子中,我们首先创建了一个 Bitmap
并在其上绘制了一些内容,然后使用 ColorMatrix
和 ColorMatrixColorFilter
将绘制的内容转换为灰度图像。
通过这些方法和技巧,你可以创建各种各样的自定义控件,并且能够灵活地控制绘图的外观和效果。