Android Jetpack Compose(可组合)禁用特定可组合的硬件加速

sla*_*boy 5 android android-jetpack-compose

我有一个可组合的,即使用 NativeCanvas 与 BlurMaskFilter 一起应用一些自定义模糊效果。这对于 API > 23 的设备工作正常,问题是由旧设备的硬件加速引起的。

在这里,您可以看到模糊在 API 30(左)上有效,而在 API 22(右)上则不太有效。

在此输入图像描述

我知道我可以使用 .manifest 从清单文件中手动禁用整个应用程序或活动android:hardwareAccelerated="false"

对于视图,我们可以对特定视图而不是整个活动禁用它view.setLayerType(View.LAYER_TYPE_SOFTWARE, null)

有没有一种方法可以禁用特定可组合项的硬件加速,而不是整个应用程序/活动的硬件加速?

Phi*_*hov 9

使用互操作性 API ,您可以将ComposeView所需的配置嵌入到可组合项中:

@Composable
fun SoftwareLayerComposable(
    modifier: Modifier = Modifier,
    content: @Composable () -> Unit,
) {
    AndroidView(
        factory = { context ->
            ComposeView(context).apply {
                setLayerType(View.LAYER_TYPE_SOFTWARE, null)
            }
        },
        update = { composeView ->
            composeView.setContent(content)
        },
        modifier = modifier,
    )
}
Run Code Online (Sandbox Code Playgroud)

用法:

SoftwareLayerComposable(Modifier) {
    // your view
}
Run Code Online (Sandbox Code Playgroud)