我试图在jetpack compose中动态交换LottieAnimation中的文本。导出的lottie文件不带字形
它的工作时,使用旧的android视图内,
AndroidView(factory = { context ->
val view = LottieAnimationView(context).apply {
setAnimation(R.raw.testing_no_glyphs)
playAnimation()
repeatCount = LottieConstants.IterateForever
}
val textDel = object : TextDelegate(view) {
override fun getText(layerName: String?, input: String?): String {
return when (layerName) {
"Test234" -> "OtherLettersHere"
else -> super.getText(layerName, input)
}
}
}
val fontDel = object : FontAssetDelegate() {
override fun getFontPath(fontFamily: String?, fontStyle: String?, fontName: String?): String {
return "fonts/[MyFontInside /assets].ttf"
}
}
view.setTextDelegate(textDel)
view.setFontAssetDelegate(fontDel)
return@AndroidView view
})
但是我在Lottie的JetpackCompose版本中找不到正确的句柄来获得相同的结果。
如果我们导出带有字形的lottie,它适用于lottie json中chars
数组中的字母。但是我们希望能够替换为任何字母/符号,所以这不是一个可行的解决方案。
我注意到在5.3.0-SNAPSHOT中添加了一个fontMap
参数,但我不知道该按哪个键。
下面是我的代码:
val dynamicProperties = rememberLottieDynamicProperties(
rememberLottieDynamicProperty(LottieProperty.TEXT, value = "AaBbCcEeFf", keyPath = arrayOf("Test234"))
)
val composition by rememberLottieComposition(
spec = LottieCompositionSpec.RawRes(R.raw.testing)
)
val progress by animateLottieCompositionAsState(composition, iterations = LottieConstants.IterateForever)
LottieAnimation(
composition,
{ progress },
dynamicProperties = dynamicProperties,
fontMap = mapOf("fName" to Typeface.createFromAsset(LocalContext.current.assets, "fonts/[MyFontInside /assets].ttf"))
)
它只是显示了一个空白的所有文本内洛蒂动画-所以这是有点我卡住了。
2条答案
按热度按时间yeotifhr1#
经过一些尝试,我发现了一种为特定层添加字体的方法:
因此,在我的情况下不需要
fontMap
b1zrtrql2#
您需要在
LottieAnimation
中使用fontMap
字段。在Lottie json文件中,您需要检查它需要什么字体系列,并提供到Typeface
的MapfontMap
:密钥可以是Lottie文件中指定的“fName”、“fFamily”或“fFamily-fStyle”。*或