import
android.os.Bundle
import
androidx.activity.ComponentActivity
import
androidx.activity.compose.setContent
import
androidx.compose.animation.core.*
import
androidx.compose.foundation.background
import
androidx.compose.foundation.layout.*
import
androidx.compose.foundation.lazy.LazyColumn
import
androidx.compose.material.MaterialTheme
import
androidx.compose.material.Surface
import
androidx.compose.material.Text
import
androidx.compose.runtime.Composable
import
androidx.compose.runtime.getValue
import
androidx.compose.ui.Modifier
import
androidx.compose.ui.geometry.Offset
import
androidx.compose.ui.graphics.Brush
import
androidx.compose.ui.tooling.preview.Preview
import
androidx.compose.ui.unit.dp
import
com.example.shimmeranimation.ui.theme.ShimmerAnimationTheme
import
com.example.shimmeranimation.ui.theme.ShimmerColorShades
class
MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super
.onCreate(savedInstanceState)
setContent {
ShimmerAnimationTheme(darkTheme =
false
) {
Surface(color = MaterialTheme.colors.background) {
LazyColumn {
repeat(
5
) {
item {
ShimmerAnimation()
}
}
}
}
}
}
}
}
@Composable
fun ShimmerAnimation(
) {
val transition = rememberInfiniteTransition()
val translateAnim by transition.animateFloat(
initialValue = 0f,
targetValue = 1000f,
animationSpec = infiniteRepeatable(
tween(durationMillis =
1200
, easing = FastOutSlowInEasing),
RepeatMode.Reverse
)
)
val brush = Brush.linearGradient(
colors = ShimmerColorShades,
start = Offset(10f, 10f),
end = Offset(translateAnim, translateAnim)
)
ShimmerItem(brush = brush)
}
@Composable
fun ShimmerItem(
brush: Brush
) {
Column(modifier = Modifier.padding(
16
.dp)) {
Spacer(
modifier = Modifier
.fillMaxWidth()
.size(
250
.dp)
.background(brush = brush)
)
Spacer(
modifier = Modifier
.fillMaxWidth()
.height(
30
.dp)
.padding(vertical =
8
.dp)
.background(brush = brush)
)
}
}