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

OSCHINA-MIRROR/zhangmengxiong-MXImagePicker

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 06.03.2025 00:23 8d6e493

ImagePicker

Описание

Кotlin и AndroidX аналог выбора изображений из WeChat

Ссылка Gradle

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

Изображение текста Изображение текста Изображение текста

Инструкция по использованию

Шаг 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: Запуск страницы выбора

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()

Вызов камеры для записи видео```kotlin

val builder = MXCaptureBuilder().setType(MXPickerType.Video).setMaxVideoLength(10) startActivityForResult(builder.createIntent(this), 0x11)

// Получение результата в.onActivityResult val file = builder.getCaptureFile()


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

![Image text](https://gitee.com/zhangmengxiong/MXImagePicker/raw/master/imgs/screenshot3.png)

```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 )

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

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