自定义控件三部曲之绘图篇(九)——Paint之setColorFilter

本文详细介绍了Android中自定义控件时如何使用setColorFilter,包括ColorMatrixColorFilter、LightingColorFilter和PorterDuffColorFilter的用法。通过实例展示了如何改变图片色彩、实现按钮点击效果以及模拟DrawableCompat的setTint功能。文章还提到了混合模式在图形处理中的应用,并提供了源码下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:或许你身边一个不起眼的小人物就是某个领域的超级大神~不要轻易地侮辱任何一个人的错误,因为你也曾范错过
 

系列文章:

Android自定义控件三部曲文章索引http://blog.csdn.net/harvic880925/article/details/50995268


上篇给大家讲了在setColorFilter中使用ColorMatrix的过程,其实setColorFilter除了使用ColorMatrix还有其它的用法,这节我们就具体来看看setColorFilter的用法。

在本篇文章中,你将学到两个实例:

 

  • 按钮点击时,动态加深图片色彩(简易方法)
  • 可以学到针对不同主题动态设置不同色彩图片的方法(setTint())

 

一、setColorFilter

setColorFilter的完整声明为:

 

 

public ColorFilter setColorFilter(ColorFilter filter)

参数是传入ColorFilter的对象,其实ColorFilter是一个空对象,其中什么也没有:

public class ColorFilter {
    int native_instance;

    /**
     * @hide
     */
    public int nativeColorFilter;

    protected void finalize() throws Throwable {
        try {
            super.finalize();
        } finally {
            finalizer(native_instance, nativeColorFilter);
        }
    }

    private static native void finalizer(int native_instance, int nativeColorFilter);
}

但是ColorFilter派生了几个子类,分别是:

 

下面我们分别来讲讲各个子类的用法及效果

1、ColorMatrixColorFilter

这个是色彩矩阵颜色过滤器,该类只有两个函数,也都是构造函数:

 

 

ColorMatrixColorFilter(ColorMatrix matrix)
ColorMatrixColorFilter(float[] array)

在这里可以直接传入一个ColorMatrix对象,也可以直接传入一个色彩矩阵。我们知道ColorMatrix对应的也是一个色彩矩阵。
上篇中我们在讲解ColorMatrix的用法时,也一直用到的是ColorMatrixColorFilter。
这里在下面看下用法,具体就不再讲了,不理解的同学,请返回去看上一篇

canvas.drawBitmap(bitmap, null, new Rect(0, 0, 500, 500 * bitmap.getHeight() / bitmap.getWidth()), mPaint);

canvas.translate(510, 0);
// 生成色彩矩阵
ColorMatrix colorMatrix = new ColorMatrix(new float[]{
        1/2f,1/2f,1/2f,0,0,
        1/3f,1/3f,1/3f,0,0,
        1/4f,1/4f,1/4f,0,0,
        0,0,0,1,0
});
mPaint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));

canvas.drawBitmap(bitmap, null, new Rect(0, 0, 500, 500 * bitmap.getHeight() / bitmap.getWidth()), mPaint);

效果图如下:

 

 

2、LightingColorFilter

前一篇,我们利用一篇的篇幅来讲解ColorMatrix的作用,所有需要完成色彩操作的都是可以利用ColorMatrix来完成的,只是有一点ColorMatrix纵然很强大,但太!过!难!用,所以Android为我们提供了一个简单过滤颜色和增强色彩的函数,就是LightingColorFilter
这个叫做光照颜色过滤器,可以简单的完成色彩过滤和色彩增强功能。
整个类就只有一个函数,还是构造函数:

 

 

public LightingColorFilter(int mul, int add)

这里有两个参数,mul是乘法multiply的缩写,add是加法的意思。mul和add取值都是0xRRGGBB,分别对应R、G、B颜色,注意哦,这里是没有透明度A的,透明度在这里是不起作用的,LightingColorFilter只针对RGB色值起作用
比如,当前有一个颜色值为(r,g,b),对它应用LightingColorFilter(mul, add)效果后的颜色值为:

结果R值 = (r*mul.R+add.R)%255;
结果G值 = (g*mul.G+add.G)%255;
结果B值 = (b*mul.B+add.B)%255;

前面我们讲了mul和add的取值都是0xRRGGBB类型的值,即mul和add中都是包含了R、G、B分量的;
在上面的公式中,三个颜色分量R、G、B值的方式都是一样的,我们只拿红色来讲:

结果R值 = (r*mul.R+add.R)%255;

作用LightingColorFilter(mul, add)效果后的R值

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值