0%

APP View整体变灰

背景

国内有些日期会要求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