0Pricing
Android Academy · Урок

Загрузка изображений с 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 — локальная установка не требуется.

Все уроки этого курса

  1. Retrofit и REST API
  2. Загрузка изображений с Coil
  3. Обработка ошибок и UX
  4. Push-уведомления
  5. WorkManager и фоновые задачи
  6. Публикация в Play Store
← Назад к Android Academy