Ссылка для Gradle
implementation 'com.gitee.zhangmengxiong:MXImagePicker:1.6.9'
implementation "androidx.appcompat:appcompat:x.x.x"
implementation "androidx.recyclerview:recyclerview:x.x.x"
implementation "com.github.bumptech.glide:glide:x.x.x"
implementation "androidx.constraintlayout:constraintlayout:2.0.4"
implementation "com.github.chrisbanes:PhotoView:2.3.0"
// Если версия Android < 33 требуется следующее разрешение:
Manifest.permission.CAMERA
Manifest.permission.READ_EXTERNAL_STORAGE
// Если версия Android >= 33 требуется следующее разрешение:
Manifest.permission.CAMERA
Manifest.permission.READ_MEDIA_IMAGES
Manifest.permission.READ_MEDIA_VIDEO
// Для приложений с targetSdkVersion >= 29 требуется добавление следующего атрибута в узел application
android:requestLegacyExternalStorage = "true"
Внимание: Отсутствие разрешений приведет к ошибке при входе в страницу выбора!
val intent = MXPickerBuilder().setMaxSize(3).createIntent(this) startActivityForResult(intent, 0x22)
##### Объяснение предварительной загрузки
Предварительная загрузка позволяет предварительно искать изображения/видео на устройстве, уменьшая время загрузки при первом входе на страницу выбора.
```kotlin
MXImagePicker.init(application)
lifecycleScope.launch{ MXImagePicker.preScan(this@MainActivity) }
```##### Объяснение параметров MXPickerBuilder1. `setMaxSize(size: Int)` устанавливает максимальное количество выбираемых файлов
2. `setType(type: PickerType)` устанавливает тип
* PickerType.Image = изображение
* PickerType.Video = видео
* PickerType.ImageAndVideo = изображение + видео (смешанный выбор)
3. `setCameraEnable(enable: Boolean)` устанавливает, включена ли функция съемки, по умолчанию = true
4. `setMaxVideoLength(length: Int)` при типе = Video, можно установить максимальную длительность видео, единица измерения: секунды, по умолчанию = -1 (без ограничений)
5. `setMaxListSize(size: Int)` максимальная длина списка для загрузки, чтобы предотвратить возникновение OOM при большом количестве изображений, -1 = без ограничений, по умолчанию ограничение длины = 1000 элементов```kotlin
// Этот метод будет вызван при создании Activity изображения выбора. Обычно используется для изменения темы навигационной и статусной строк, в демонстрации используется `ImmersionBar` для реализации эффекта погружения.
MXImagePicker.registerActivityCallback { activity ->
ImmersionBar.with(activity)
.autoDarkModeEnable(true)
.statusBarColorInt(activity.resources.getColor(R.color.picker_color_background))
.fitsSystemWindows(true)
.navigationBarColor(R.color.picker_color_background)
.init()
}
```##### Настройка цветов страницы
Установите следующие значения цветов в основной проект в xml-ресурсах, чтобы изменить соответствующие цвета на странице.
```xml
<!-- Цвет фона страницы -->
<color name="mx_picker_color_background">#333333</color>
<!-- Цвет шрифта и иконок -->
<color name="mx_picker_color_important">#F1F1F1</color>
<!-- Цвет выделенного состояния -->
<color name="mx_picker_color_select">#03CE65</color>
Установите следующие определения строк в соответствующих языковых каталогах, чтобы изменить соответствующие текстовые подсказки на странице.
<string name="mx_picker_string_select">Выбрать</string>
<string name="mx_picker_string_all">Все</string>
<string name="mx_picker_string_image_limit_tip">Вы можете выбрать не более %s изображений!</string>
<string name="mx_picker_string_video_limit_tip">Вы можете выбрать не более %s видео!</string>
<string name="mx_picker_string_video_limit_length_tip">Можно выбрать видео продолжительностью не более %s секунд</string>
<string name="mx_picker_string_need_permission_storage_camera">Необходимо разрешение на запись в хранилище и использование камеры</string>
<string name="mx_picker_string_need_permission_storage">Необходимо разрешение на чтение из хранилища</string>
<string name="mx_picker_string_open_failed">Открытие не удалось!</string>
<string name="mx_picker_string_preview">Просмотр</string>
<string name="mx_picker_string_not_compress">Оригинальное изображение</string>
<string name="mx_picker_string_take_pic">Сфотографировать</string>
<string name="mx_picker_string_take_video">Снять видео</string>
<string name="mx_picker_string_show_list">Просмотр изображений</string>
```Ресурсы dimens.xml
```xml
<!-- Высота верхней навигационной панели -->
<dimen name="mx_picker_bar_height">50dp</dimen>
Для этого необходимо реализовать интерфейс IImageLoader
и зарегистрировать его в сервисе `MXImagePicker````kotlin
// Данные объекта
data class MXItem(val path: String, val time: Long, val type: MXPickerType, val duration: Int = 0)
// Глобальная регистрация загрузчика, который можно отключить в Application, что не влияет на скорость запуска MXImagePicker.registerImageLoader { activity, item, imageView -> if (File(item.path).exists()) { Glide.with(activity).load(File(item.path)) .placeholder(R.drawable.mx_icon_picker_image_place_holder).into(imageView) } else if (item.path.startsWith("http")) { Glide.with(activity).load(item.path) .placeholder(R.drawable.mx_icon_picker_image_place_holder).into(imageView) } else { Glide.with(activity).load(item.uri) .placeholder(R.drawable.mx_icon_picker_image_place_holder).into(imageView) } }
#### Шаг 4: Получение результата
```kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK && requestCode == 0x22) {
val paths = MXPickerBuilder.getPickerResult(data) ?: return // Возвращает данные типа List<String>
println(paths)
}
}
val builder = MXCaptureBuilder().setType(MXPickerType.Image)
startActivityForResult(builder.createIntent(this), 0x11)
// Получение результата в onActivityResult
val file = builder.getCaptureFile()
val builder = MXCaptureBuilder().setType(MXPickerType.Video).setMaxVideoLength(10)
startActivityForResult(builder.createIntent(this), 0x11)
```// Получение результата в onActivityResult
val file = builder.getCaptureFile()
MXImgShowActivity.open(
this, arrayListOf(
"http://videos.jzvd.org/v/饺子主动.jpg",
"http://videos.jzvd.org/v/饺子运动.jpg"
), "Информация об изображении"
)
val file = File(".../xx.png")
val scaleImg = MXImageCompress.from(context)
.setCacheDir(applicationContext.cacheDir) // Кэш-директория
.setSupportAlpha(true) // Поддержка прозрачного канала (формат .png) по умолчанию = формат .jpg
.setTargetFileSize(50) // Установка целевого размера сжатого файла, килобайты, по умолчанию = 0 (естественное сжатие)
.setTargetPixel(2400) // Установка целевого размера сжатого файла, пиксели
.compress(file)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )