Ссылка 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"
AndroidManifest.xml
: добавление разрешений для доступа к альбому и хранилищу // Если версия 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"
Примечание: Отсутствие разрешений приведёт к ошибке при входе в страницу выбора!#### Шаг 3: Запуск страницы выбора
val intent = MXPickerBuilder().setMaxSize(3).createIntent(this)
startActivityForResult(intent, 0x22)
Предварительная загрузка позволяет заранее находить локальные изображения/видео, что уменьшает время загрузки при первом открытии страницы выбора.
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
50dp
##### Настройка пользовательского загрузчика изображений (по умолчанию используется Glide)
Для этого необходимо расширить и реализовать интерфейс `IImageLoader`, а затем зарегистрировать его в сервисе `MXImagePicker`.```kotlin
// Данные объекта
data class MXItem(val путь: String, val время: Long, val тип: MXPickerType, val продолжительность: Int = 0)
// Глобальная регистрация загрузчика, который можно отключить в Application, что не влияет на скорость запуска
MXImagePicker.registerImageLoader { activity, item, imageView ->
if (File(item.путь).exists()) {
Glide.with(activity).load(File(item.путь))
.placeholder(R.drawable.mx_icon_picker_image_place_holder).into(imageView)
} else if (item.путь.startsWith("http")) {
Glide.with(activity).load(item.путь)
.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)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK && requestCode == 0x22) {
val пути = MXPickerBuilder.getPickerResult(data) ?: return // Возвращает данные типа List<String>
println(пути)
}
}
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()
### Просмотр изображений

```kotlin
MXImgShowActivity.open(
this, arrayListOf(
"http://videos.jzvd.org/v/%E9%A3%9E%E9%A3%9F%E4%B8%BB%E9%A1%B9%E5%8A%A8%E4%BD%9C.jpg",
"http://videos.jzvd.org/v/%E9%A3%9F%E9%A3%9E%E8%BF%9B%E5%8A%A8.jpg"
), "Подробнее об изображении"
)
val file = File(".../xx.png")
val scaleImg = MXImageCompress.from(context)
.setCacheDir(applicationContext.cacheDir) // Кэш директория
.setSupportAlpha(true) // Поддерживает прозрачный канал ('.png' формат) По умолчанию='.jpg' формат
.setTargetFileSize(50) // Устанавливает целевой размер файла после сжатия, единицы измерения: Kb По умолчанию=0 естественное сжатие
.setTargetPixel(2400) // Устанавливает целевое значение ширины или высоты после сжатия, единицы измерения: пикселей
.compress(file)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )