Куда класть картинки и как быстро вывести их в ImageView

Кратко: иконку приложения кладите в mipmap (лучше адаптивную), все остальные UI‑изображения — в drawable; вставляйте в разметку через android:src/@drawable/... или в коде через setImageResource / библиотеки для сети.

Разница между drawable и mipmap

  • drawable — общие ресурсы интерфейса: векторные (.xml), растровые (.png, .webp, .jpg), селекторы, shape. Подходит для кнопок, фоновых картинок, иллюстраций.
  • mipmap — наборы для launcher icon (mipmap-*/ adaptive icons). Используется именно для значка приложения на лаунчере.
  • raw / assets — «сырые» файлы, если нужен доступ как к потоку; для UI обычно не используются.

Правило на практике: всё, что не launcher icon — в drawable; launcher icon — в mipmap.

Как буквально добавить картинку (шаги)

  1. Подготовьте файл: предпочитайте WebP или вектор (.svg → vector drawable). Имена файлов — только строчные латинские буквы, цифры и подчёркивания (ic_profile.png).
  2. Для обычной картинки:
    • В Android Studio: app → src → main → res → drawable — перетащите файл или правый клик → Reveal in Finder/Explorer → вставить и синхронизировать.
    • Убедитесь, что ресурс доступен как R.drawable.ic_name.
  3. Для иконки приложения:
    • Правый клик по модулю app → New → Image Asset → Launcher Icons (Adaptive and Legacy).
    • Загрузите foreground/background или SVG, нажмите Next → Finish. Иконки появятся в mipmap-* и (при необходимости) в манифесте.
  4. Проверка: в AndroidManifest.xml атрибут android:icon должен ссылаться на @mipmap/ic_launcher (если поменяли иконку).

Пример: ImageView в XML и в коде

XML:

<ImageView
    android:id="@+id/imageLogo"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:src="@drawable/ic_logo"
    android:contentDescription="@string/logo_description"
    android:scaleType="centerCrop"/>

Kotlin:

val imageView: ImageView = findViewById(R.id.imageLogo)
imageView.setImageResource(R.drawable.ic_logo)

Java:

ImageView imageView = findViewById(R.id.imageLogo);
imageView.setImageResource(R.drawable.ic_logo);

Если загружаете из сети — используйте Glide/Coil/Picasso для кэширования и управления памятью.

Форматы и оптимизация

  • Vector drawable — для иконок и простых иллюстраций (экономит место и чётко масштабируется).
  • WebP — лучшее компресс‑качество для растровых изображений.
  • PNG — прозрачность; JPG — фотографии без прозрачности. Оптимизируйте размеры: не включайте в проект исходники с разрешением в десятки мегапикселей — они загружают память и GPU. Используйте Convert to WebP и уменьшайте реальные пиксели под ожидаемый показ.

Слишком большие или нересайзнутые изображения приводят к падениям по памяти (OutOfMemoryError), особенно в списках (RecyclerView).

Частые ошибки

  • Неправильные имена файлов: пробелы, кириллица, заглавные → R не сгенерируется.
  • Перепутали @drawable и @mipmap в разметке.
  • Забили contentDescription → проблемы с доступностью.
  • Хранение launcher icon в drawable → шанс неконсистентности на лаунчере.
  • Не оптимизированные исходники → плохая производительность и большой APK/AAB.

FAQ

  • Нужно ли класть все плотности в drawable-*?
    Нет. Часто достаточно одного качественного изображения + векторных ресурсов; для launcher icon — используйте mipmap с наборами под плотности.
  • Где хранить изображения для сторонних библиотек/движков?
    В assets или raw, если библиотека требует поток или исходный файл без преобразований.
  • Как добавить SVG?
    Импортируйте через New → Vector Asset или конвертируйте в Vector Drawable; для сложных SVG может потребоваться правка XML.

Если ресурс не виден в R.drawable, проверьте имя файла, расширение и расположение (res/drawable), затем Build → Rebuild Project.