in benchmarks/showcases/LazyGridImageView/nativeAndroidApp/app/src/main/java/org/jetbrains/lazygridimage/MainActivity.kt [46:134]
fun App() {
val context = LocalContext.current
val gridState = rememberLazyGridState()
val coroutineScope = rememberCoroutineScope()
// State for auto-scrolling
var autoScroll by remember { mutableStateOf(false) }
var scrollingDown by remember { mutableStateOf(true) }
var currentIndex by remember { mutableStateOf(0) }
val uris = remember {
val imagesFolder = "downloaded_images/"
val availableResources = context.assets.list(imagesFolder)
List(999) { index ->
"file:///android_asset/" + imagesFolder + availableResources!![index % availableResources.size]
}
}
val numOfColumns = 3
// Auto-scrolling effect
LaunchedEffect(autoScroll) {
if (autoScroll) {
while (true) {
delay(100)
if (scrollingDown) {
if (currentIndex < uris.size - numOfColumns - 1) {
currentIndex += numOfColumns
} else {
scrollingDown = false
}
} else {
if (currentIndex > 0) {
currentIndex -= numOfColumns
} else {
scrollingDown = true
}
}
coroutineScope.launch {
gridState.animateScrollToItem(
index = currentIndex,
)
}
}
}
}
MaterialTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally
) {
// Checkbox for auto-scrolling
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(8.dp)
) {
Checkbox(
checked = autoScroll,
onCheckedChange = { autoScroll = it }
)
Spacer(modifier = Modifier.width(8.dp))
Text("Auto Scroll")
}
LazyVerticalGrid(
columns = GridCells.Fixed(numOfColumns),
contentPadding = PaddingValues(4.dp),
modifier = Modifier.fillMaxSize(),
state = gridState
) {
items(uris) { uri ->
ImageCard(
uri,
modifier = Modifier.padding(4.dp)
)
}
}
}
}
}
}