Есть ли средство выбора действий, которое отображает числа на изображениях, чтобы показать порядок выбора с помощью 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
                            }
                        )
                    }
                }
            }
        }
    )

0 ответов

Другие вопросы по тегам