1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zhangmengxiong-MXImagePicker

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ImagePicker

Описание

Базирующийся на Kotlin и AndroidX аналог выбора изображений из WeChat

Ссылка для Gradle

    implementation 'com.gitee.zhangmengxiong:MXImagePicker:1.6.9'

Скриншот 1 Скриншот 2 Скриншот 3

Способ использования

Шаг 1: Добавление AndroidX библиотеки и библиотеки для загрузки изображений Glide и библиотеки для масштабирования изображений

    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"

Шаг 2: Изменение конфигурации '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: Запуск страницы выбора```kotlin

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>
Настройка пользовательского загрузчика изображений (по умолчанию используется Glide)

Для этого необходимо реализовать интерфейс 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()

Просмотр изображений

Image text

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления (22)

все

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/zhangmengxiong-MXImagePicker.git
git@api.gitlife.ru:oschina-mirror/zhangmengxiong-MXImagePicker.git
oschina-mirror
zhangmengxiong-MXImagePicker
zhangmengxiong-MXImagePicker
master