| package com.airbnb.lottie.sample.compose.examples |
| |
| import android.graphics.Typeface |
| import androidx.compose.foundation.layout.Column |
| import androidx.compose.foundation.layout.fillMaxWidth |
| import androidx.compose.foundation.rememberScrollState |
| import androidx.compose.foundation.verticalScroll |
| import androidx.compose.runtime.Composable |
| import androidx.compose.runtime.LaunchedEffect |
| import androidx.compose.runtime.getValue |
| import androidx.compose.runtime.mutableStateOf |
| import androidx.compose.runtime.remember |
| import androidx.compose.runtime.setValue |
| import androidx.compose.ui.Modifier |
| import androidx.compose.ui.platform.LocalContext |
| import com.airbnb.lottie.LottieProperty |
| import com.airbnb.lottie.compose.LottieAnimation |
| import com.airbnb.lottie.compose.LottieCompositionSpec |
| import com.airbnb.lottie.compose.rememberLottieComposition |
| import com.airbnb.lottie.compose.rememberLottieDynamicProperties |
| import com.airbnb.lottie.compose.rememberLottieDynamicProperty |
| import com.airbnb.lottie.sample.compose.R |
| import kotlinx.coroutines.Dispatchers |
| import kotlinx.coroutines.withContext |
| |
| @Composable |
| fun TextExamplesPage() { |
| UsageExamplePageScaffold { |
| Column( |
| modifier = Modifier |
| .fillMaxWidth() |
| .verticalScroll(rememberScrollState()) |
| ) { |
| ExampleCard("Default", "Loading fonts using default asset paths") { |
| Example1() |
| } |
| ExampleCard("Dynamic Properties", "Replace fonts with custom typefaces") { |
| Example2() |
| } |
| } |
| } |
| } |
| |
| @Composable |
| private fun Example1() { |
| // Lottie will automatically look for fonts in src/main/assets/fonts. |
| // It will find font files based on the font family specified in the Lottie Json file. |
| // You can specify a different assets subfolder by using the fontAssetsFolder parameter. |
| // By default, it will look for ttf files. |
| // You can specify a different file extension by using the fontFileExtension parameter. |
| val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.name)) |
| LottieAnimation( |
| composition, |
| progress = { 0f }, |
| ) |
| } |
| |
| @Composable |
| private fun Example2() { |
| val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.name)) |
| val typeface = rememberTypeface("fonts/Roboto.ttf") |
| val dynamicProperties = rememberLottieDynamicProperties( |
| rememberLottieDynamicProperty(LottieProperty.TYPEFACE, typeface, "NAME") |
| ) |
| |
| LottieAnimation( |
| composition, |
| progress = { 0f }, |
| dynamicProperties = dynamicProperties, |
| ) |
| } |
| |
| @Composable |
| private fun rememberTypeface(path: String): Typeface? { |
| var typeface: Typeface? by remember { mutableStateOf(null) } |
| val context = LocalContext.current |
| LaunchedEffect(path) { |
| typeface = null |
| withContext(Dispatchers.IO) { |
| typeface = Typeface.createFromAsset(context.assets, "fonts/Roboto.ttf") |
| } |
| } |
| return typeface |
| } |