Android: анимация Lottie с динамическим текстом и проблема с пользовательским шрифтом

Я пытаюсь динамически поменять местами текст внутри LottieAnimation в компоновке реактивного ранца. Файл лотереи экспортируется без глифов

Он работает при использовании старого представления 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, чтобы получить тот же результат.

Если мы экспортируем лотерею с глифами, это работает для букв в массиве chars внутри лотереи json. Но мы хотим иметь возможность заменять любые буквы/символы, так что это нежизнеспособное решение.

Я заметил в 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"))
)

Он просто показывает пустое место для всех текстов внутри Lottie Animation - так что это своего рода то, где я застрял.

0
0
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После проб и ошибок я нашел способ добавить шрифт для определенного слоя:

val typeface = Typeface.createFromAsset(LocalContext.current.assets, "fonts/[MyFontInside /assets].ttf")

val dynamicProperties = rememberLottieDynamicProperties(
    rememberLottieDynamicProperty(LottieProperty.TEXT, value = "AaBbCcEeFf", keyPath = arrayOf("Test234")),
--> rememberLottieDynamicProperty(LottieProperty.TYPEFACE, value = typeface, keyPath = arrayOf("Test234")),
)

Следовательно, в моем случае нет необходимости в fontMap

Другие вопросы по теме