Освой Android играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Coil

Библиотека Coil получила своё название от сокращения "Coroutine Image Loader". На мой взгляд, автор библиотеки неправ. Библиотеку следовало бы назвать Cail (Cat Image Loader).

Репозиторий на Гитхабе.

Библиотека написана на Kotlin и использует корутины. При этом она быстрее известной Glide. Пользоваться удобно и просто. Примеры взяты из документации.

В Android Studio прописываем зависимость в Gradle (проверяйте номер свежей версии).


dependencies {
    implementation 'io.coil-kt:coil:1.4.0' // старая ветка, больше не поддерживается
    implementation 'io.coil-kt:coil:2.2.2' // новая ветка разработки
}

Разработчики библиотеки в октябре 2021 года запустили новую ветку с версией 2.х.

Загружаем в ImageView

Загружаем картинку из сети:


import coil.load

val imageView: ImageView = findViewById(R.id.imageView)
imageView.load("https://developer.alexanderklimov.ru/android/images/android_cat.jpg")

По сути, библиотека делает функцию-расширение для ImageView, добавляя в компонент новые методы.

Можно загружать из ресурсов, файловой системы и т.д.


// Resource
imageView.load(R.drawable.cat)

// File
imageView.load(File("/path/to/kitten.jpg"))

Более сложный вариант с применением лямбды - используем заглушку и трансформацию в виде круга.


imageView.load("https://developer.alexanderklimov.ru/android/images/android_cat.jpg"){
    crossfade(true)
    crossfade(2000)
    placeholder(R.drawable.ic_action_cat)
    transformations(CircleCropTransformation())

Доступны также GrayscaleTransformation (1.x), BlurTransformation (1.x), RoundedCornersTransformation.

Например, картинка с закруглёнными углами (указываем величину радиуса):


transformations(RoundedCornersTransformation(40f))

Получаем Drawable

Не всегда нам нужно сразу загружать картинку в ImageView, иногда нам нужно получить само изображение, которое потом можно где-то применить. В следующем примере мы получим картинку как Drawable и применим к кнопке как значок слева от текста.


val button: Button = findViewById(R.id.button)
button.setOnClickListener {
    val imageLoader = ImageLoader(this)
    val request: ImageRequest = ImageRequest.Builder(this)
        .data("https://developer.alexanderklimov.ru/android/images/android_cat.jpg")
        .target { drawable ->
            button.setCompoundDrawablesRelativeWithIntrinsicBounds(
                drawable, null, null,
                null
            )
        }
        .build()

    imageLoader.enqueue(request)
}

Кроме асинхронного метода enqueue() есть ещё execute(), который можно использовать в корутинах.

Поддержка других форматов

Библиотека также поддерживает форматы GIF и SVG, в этом случае нужно добавить дополнительные зависимости. Подробнее смотрите в документации.

В принципе, приведённых примеров достаточно, чтобы загружать котиков в ваше приложение.

Дополнительные материалы

Compose: Загружаем из интернета (библиотека Coil)

Реклама