Hiệu ứng Shimmer là một cách tuyệt vời để hiển thị trạng thái đang tải (loading) trong ứng dụng, mang lại trải nghiệm mượt mà và trực quan cho người dùng. Trong Jetpack Compose, việc tạo hiệu ứng này trở nên dễ dàng hơn bao giờ hết. Bài viết này sẽ hướng dẫn bạn cách triển khai hiệu ứng Shimmer đơn giản nhưng hiệu quả.
Hiệu ứng Shimmer thường được sử dụng để hiển thị trạng thái tải, ví dụ như khi dữ liệu đang được lấy từ server. Nó tạo ra một hiệu ứng ánh sáng chuyển động trên giao diện, giúp người dùng biết rằng ứng dụng đang hoạt động. Trong Jetpack Compose, chúng ta có thể tận dụng Modifier và Canvas để tạo hiệu ứng này mà không cần thư viện phức tạp.
Dưới đây là cách tạo một composable hiển thị hiệu ứng Shimmer:
@Composable
fun ShimmerEffect(
modifier: Modifier = Modifier,
durationMillis: Int = 1000
) {
val infiniteTransition = rememberInfiniteTransition()
val shimmerTranslateAnim by infiniteTransition.animateFloat(
initialValue = -2f,
targetValue = 2f,
animationSpec = infiniteRepeatable(
animation = tween(durationMillis, easing = LinearEasing),
repeatMode = RepeatMode.Restart
)
)
Box(
modifier = modifier
.background(
brush = Brush.linearGradient(
colors = listOf(
Color.LightGray.copy(alpha = 0.9f),
Color.LightGray.copy(alpha = 0.2f),
Color.LightGray.copy(alpha = 0.9f)
),
start = Offset(shimmerTranslateAnim * 200f, 0f),
end = Offset(shimmerTranslateAnim * 200f + 200f, 0f)
)
)
)
}
Bạn có thể sử dụng composable này để tạo placeholder cho bất kỳ thành phần giao diện nào. Ví dụ, tạo một danh sách giả lập với hiệu ứng Shimmer:
@Composable
fun ShimmerListItem() {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
elevation = CardDefaults.cardElevation(4.dp)
) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
horizontalArrangement = Arrangement.SpaceBetween
) {
Box(
modifier = Modifier
.size(80.dp)
.clip(CircleShape)
.shimmerEffect()
)
Column(
modifier = Modifier
.weight(1f)
.padding(start = 16.dp),
verticalArrangement = Arrangement.SpaceEvenly
) {
Box(
modifier = Modifier
.fillMaxWidth(0.7f)
.height(20.dp)
.shimmerEffect()
)
Spacer(modifier = Modifier.height(8.dp))
Box(
modifier = Modifier
.fillMaxWidth(0.4f)
.height(20.dp)
.shimmerEffect()
)
}
}
}
}
Sử dụng trong danh sách:
@Composable
fun ShimmerList() {
LazyColumn {
items(5) {
ShimmerListItem()
}
}
}
Khi áp dụng, bạn sẽ thấy một danh sách các phần tử giả lập với hiệu ứng Shimmer chuyển động mượt mà. Hiệu ứng này không chỉ đẹp mắt mà còn nhẹ, không làm ảnh hưởng đến hiệu suất ứng dụng.
Hiệu ứng Shimmer trong Jetpack Compose là một cách đơn giản nhưng hiệu quả để cải thiện trải nghiệm người dùng khi tải dữ liệu. Với vài dòng code, bạn có thể tạo ra một giao diện mượt mà và chuyên nghiệp. Hãy thử áp dụng vào dự án của bạn và tùy chỉnh theo ý thích!
You need to login in order to like this post: click here
YOU MIGHT ALSO LIKE