背景
国内有些日期会要求APP整体置灰
Android
应用ColorMatrix设置饱和度为零
Kotlin
1 2 3
| view.setLayerType(View.LAYER_TYPE_HARDWARE, Paint().apply { colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0F) }) })
|
Java
1 2 3 4 5
| Paint paint = new Paint(); ColorMatrix colorMatrix = new ColorMatrix(); colorMatrix.setSaturation(0); paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix)); view.setLayerType(View.LAYER_TYPE_HARDWARE, paint);
|
iOS
添加layer并设置compositingFilter为saturationBlendMode,设置背景颜色为0饱和度颜色,如黑白灰,或者
UIColor(hue: 0, saturation: 0, brightness: 1, alpha: 1)
色相和亮度可以为[0, 1]任意值
Swift
1 2 3 4 5
| let layer = CALayer() layer.frame = view.frame layer.compositingFilter = "saturationBlendMode" layer.backgroundColor = UIColor.white.cgColor view.layer.addSublayer(layer)
|
Objective-C
1 2 3 4 5
| CALayer *layer = CALayer.new; layer.frame = view.frame; layer.compositingFilter = @"saturationBlendMode"; layer.backgroundColor = UIColor.whiteColor.CGColor; [view.layer addSublayer:layer];
|
关于SaturationBlendMode:

应用为compositingFilter后会取当前layer的饱和度与其他layer的色相亮度混合,当前layer饱和度为0时也就间接将其他layer的饱和度设置为0
此外,可以用这种方式调整为任意灰度,即
grayscale = 1 - saturation