Загрузка изображений с Coil
Эффективно загружайте и кэшируйте сетевые изображения с помощью Coil. Применяйте преобразования (CircleCrop, RoundedCorners), обрабатывайте заполнители и ошибки.
«Загрузка изображений с Coil» — бесплатный урок Android Academy на CoddyKit. Это урок 2 из 6. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 6 уроков всего.
Зачем нужна библиотека изображений?
Загрузка изображений из интернета на удивление сложна:
- Загрузка в фоновом потоке
- Кэширование на диске и в памяти
- Эффективное декодирование (для предотвращения сбоев OOM)
- Отображение заполнителя во время загрузки
- Обработка ошибок (повреждённая ссылка, отсутствие сети)
Coil выполняет всё это одной строкой кода.
Что такое Coil?
Coil (Coroutine Image Loader) — современная библиотека загрузки изображений для Android, созданная для Kotlin и сопрограмм.
- Легковесная — меньше Glide или Picasso
- Ориентирована на Kotlin и поддерживает сопрограммы
- Учитывает жизненный цикл — автоматически отменяет загрузку
- Поддерживает GIF, SVG и кадры видео
Добавление Coil
Добавьте зависимость в app/build.gradle:
// app/build.gradle
dependencies {
implementation 'io.coil-kt:coil:2.6.0'
}
// Also make sure internet permission is in AndroidManifest.xml:
// <uses-permission android:name="android.permission.INTERNET" />Базовая загрузка изображений
Загрузите изображение в ImageView одной строкой:
import coil.load
// In your Activity or Adapter:
binding.ivAvatar.load("https://picsum.photos/200")
// With a placeholder and error image:
binding.ivAvatar.load("https://picsum.photos/200") {
placeholder(R.drawable.ic_placeholder)
error(R.drawable.ic_error)
crossfade(true) // smooth fade-in animation
}Загрузка в RecyclerView
Coil автоматически отменяет ожидающие загрузки, когда ViewHolder повторно используется, предотвращая появление неправильных изображений в неправильных строках:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val post = getItem(position)
holder.tvTitle.text = post.title
holder.ivCover.load(post.imageUrl) {
placeholder(R.drawable.ic_image_placeholder)
error(R.drawable.ic_broken_image)
crossfade(300) // 300ms fade-in
size(200, 200) // resize to 200×200 pixels
}
}Преобразования
Применяйте преобразования к загруженным изображениям:
CircleCropTransformation()— круглое изображение (идеально для аватаров)RoundedCornersTransformation(radius)— скруглённые углыBlurTransformation(context, radius)— эффект размытия
Пример преобразования
Отобразите круглый аватар пользователя:
import coil.load
import coil.transform.CircleCropTransformation
import coil.transform.RoundedCornersTransformation
// Circular avatar
binding.ivAvatar.load(user.profileImageUrl) {
transformations(CircleCropTransformation())
placeholder(R.drawable.ic_default_avatar)
error(R.drawable.ic_default_avatar)
}
// Rounded corners on a card image
binding.ivCover.load(post.coverUrl) {
transformations(RoundedCornersTransformation(16f))
crossfade(true)
}Кэширование
Coil автоматически кэширует изображения на двух уровнях:
- Кэш в памяти — самый быстрый, очищается при завершении работы приложения
- Дисковый кэш — сохраняется между запусками приложения, по умолчанию 250 MB
Если один и тот же URL загружается дважды, при второй загрузке данные берутся из кэша — сетевой запрос не выполняется.
Загрузка из разных источников
Coil может загружать изображения из разных источников, а не только по URL:
// From a URL (most common)
imageView.load("https://example.com/image.jpg")
// From a URI (e.g., gallery image)
imageView.load(uri)
// From a drawable resource
imageView.load(R.drawable.my_image)
// From a File
imageView.load(File("/sdcard/photo.jpg"))
// From a bitmap
imageView.load(bitmap)Быстрая проверка
Какое преобразование Coil следует использовать, чтобы отобразить фотографию профиля пользователя в виде круга?
Итоги: загрузка изображений с Coil
Теперь Вы умеете эффективно отображать изображения из сети:
- Добавлять Coil с помощью одной зависимости Gradle
imageView.load(url) { }— загружать изображение одной строкой- Использовать изображения-заполнители и резервные изображения при ошибках
- Применять преобразования: CircleCrop, RoundedCorners, Blur
- Автоматически кэшировать данные в памяти и на диске
- Работать с URL, URI, файлами, ресурсами drawable и растровыми изображениями
Далее: научитесь корректно обрабатывать ошибки и предоставлять пользователям понятную обратную связь.
Часто задаваемые вопросы
Урок «Загрузка изображений с Coil» бесплатный?
Да — полный текст урока «Загрузка изображений с Coil» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 6 уроков всего.
Чему я научусь в уроке «Загрузка изображений с Coil»?
Эффективно загружайте и кэшируйте сетевые изображения с помощью Coil. Применяйте преобразования (CircleCrop, RoundedCorners), обрабатывайте заполнители и ошибки. Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 6.
Сколько времени занимает урок «Загрузка изображений с Coil»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Retrofit и REST API
- Загрузка изображений с Coil
- Обработка ошибок и UX
- Push-уведомления
- WorkManager и фоновые задачи
- Публикация в Play Store