Есть ли средство выбора действий, которое отображает числа на изображениях, чтобы показать порядок выбора с помощью Android Jetpack Compose?
В настоящее время я реализую функцию в Android, где пользователь выбирает несколько медиафайлов в процессе создания сообщения. Затем этот носитель сжимается и отображается в порядке выбора пользователем.
Мне удалось реализовать это в Android 12, но при тестировании с Android 13 медиафайлы упорядочиваются и возвращаются сначала в порядке изображений, а видео теряются.
Есть ли у кого-нибудь способ обойти эту проблему, или существует библиотека выбора, которая упорядочивает медиафайлы в порядке выбора и даже отображает медиафайлы со значком номера вверху?
В настоящее время я использую официальную библиотеку Photo Picker, предоставленную Google.
https://developer.android.com/training/data-storage/shared/photopicker
Вот пример того, как я обрабатываю возвращаемые изображения, а также сжатие.
val multiplePhotoPickerLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.PickMultipleVisualMedia(5),
onResult = { data ->
if (data.isNotEmpty()) {
compressedVideos.clear()
selectedImage.apply {
addAll(data)
}
coroutineScope.launch {
for (i in data.indices) {
val isImage = getMediaType(
context, data[i]
) != MediaType.MediaTypeVideo
compressedVideos.add(
VideoItem(
data[i],
null,
false,
isImage,
"",
selectedMedias.size + i,
data[i].length(context)
)
)
Timber.tag("NoticeBoard").d("Item is Image ${isImage} is in postion ${i}")
}
val largeVideos = compressedVideos.filter { it.size > MAX_UPLOAD_SIZE }.map {
VideoItem(
it.currentPath,
it.currentPath,
it.isCompressed,
it.isImage,
it.itemId,
it.index,
it.size
)
}
compressedVideos.removeIf { it.size > MAX_UPLOAD_SIZE }
val compressor = MediaCompressor(context)
context.getActivity()?.let {
isCompressing.value = true
// function to compress videos
compressor.compressMultipleFiles(
it,
compressedVideos.filter { !it.isImage }.toMutableList(),
callback = { videosItems ->
//Compress Images
val images = compressImages(
compressedVideos.filter { it.isImage }.toMutableList(),
context
)
selectedMedias.addAll(images)
selectedMedias.addAll(videosItems)
selectedMedias.addAll(largeVideos)
selectedMedias.sortBy { it?.index }
isCompressing.value = false
}
)
}
}
}
}
)