Add FeaturedLottieFileView
This commit is contained in:
+105
@@ -0,0 +1,105 @@
|
|||||||
|
package com.ericampire.android.androidstudycase.presentation.screen.home.ui
|
||||||
|
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.foundation.shape.CornerSize
|
||||||
|
import androidx.compose.material.Card
|
||||||
|
import androidx.compose.material.ExperimentalMaterialApi
|
||||||
|
import androidx.compose.material.MaterialTheme
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import com.airbnb.lottie.compose.*
|
||||||
|
import com.ericampire.android.androidstudycase.domain.entity.Lottiefile
|
||||||
|
import com.ericampire.android.androidstudycase.presentation.screen.explore.ui.LottieFileItemView
|
||||||
|
import com.ericampire.android.androidstudycase.presentation.theme.AndroidStudyCaseTheme
|
||||||
|
import com.ericampire.android.androidstudycase.presentation.theme.AppColor
|
||||||
|
import com.ericampire.android.androidstudycase.util.LottieFileProvider
|
||||||
|
|
||||||
|
@ExperimentalMaterialApi
|
||||||
|
@Composable
|
||||||
|
fun FeaturedLottieFileView(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
lottiefile: Lottiefile,
|
||||||
|
onClick: (Lottiefile) -> Unit
|
||||||
|
) {
|
||||||
|
val composition by rememberLottieComposition(
|
||||||
|
spec = LottieCompositionSpec.Url(lottiefile.lottieUrl)
|
||||||
|
)
|
||||||
|
val progress by animateLottieCompositionAsState(
|
||||||
|
composition = composition,
|
||||||
|
iterations = LottieConstants.IterateForever,
|
||||||
|
)
|
||||||
|
|
||||||
|
Card(
|
||||||
|
modifier = modifier,
|
||||||
|
elevation = 0.dp,
|
||||||
|
onClick = { onClick(lottiefile) },
|
||||||
|
content = {
|
||||||
|
Column(
|
||||||
|
content = {
|
||||||
|
Box(
|
||||||
|
modifier = modifier
|
||||||
|
.background(Color.White)
|
||||||
|
.height(200.dp)
|
||||||
|
.width(170.dp),
|
||||||
|
content = {
|
||||||
|
LottieAnimation(
|
||||||
|
modifier = Modifier.wrapContentSize(),
|
||||||
|
composition = composition,
|
||||||
|
progress = progress,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(3.dp),
|
||||||
|
modifier = Modifier
|
||||||
|
.background(AppColor.Black001)
|
||||||
|
.width(170.dp)
|
||||||
|
.padding(horizontal = 10.dp, vertical = 8.dp),
|
||||||
|
content = {
|
||||||
|
Text(
|
||||||
|
maxLines = 1,
|
||||||
|
text = lottiefile.name,
|
||||||
|
style = MaterialTheme.typography.h6,
|
||||||
|
textAlign = TextAlign.Center,
|
||||||
|
)
|
||||||
|
Text(
|
||||||
|
text = lottiefile.createdBy?.name ?: "",
|
||||||
|
maxLines = 1,
|
||||||
|
style = MaterialTheme.typography.caption,
|
||||||
|
textAlign = TextAlign.Center,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@ExperimentalMaterialApi
|
||||||
|
@Preview()
|
||||||
|
@Composable
|
||||||
|
fun FeaturedLottieFileViewPreview(@PreviewParameter(LottieFileProvider::class) data: Lottiefile) {
|
||||||
|
AndroidStudyCaseTheme(darkTheme = true) {
|
||||||
|
Box(
|
||||||
|
modifier = Modifier.fillMaxSize(),
|
||||||
|
contentAlignment = Alignment.Center,
|
||||||
|
content = {
|
||||||
|
FeaturedLottieFileView(
|
||||||
|
lottiefile = data,
|
||||||
|
onClick = {}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user