205 字
1 分钟
APP View 整体变灰

背景#

国内有些日期会要求APP整体置灰

Android#

应用ColorMatrix设置饱和度为零

Kotlin#

view.setLayerType(View.LAYER_TYPE_HARDWARE, Paint().apply {
    colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0F) })
})

Java#

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#

let layer = CALayer()
layer.frame = view.frame
layer.compositingFilter = "saturationBlendMode"
layer.backgroundColor = UIColor.white.cgColor
view.layer.addSublayer(layer)

Objective-C#

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

APP View 整体变灰
https://shsuco.com/posts/app-view整体变灰/
作者
shsuco
发布于
2022-06-10
许可协议
CC BY-NC-SA 4.0