Куда класть картинки и как быстро вывести их в 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.
Как буквально добавить картинку (шаги)
- Подготовьте файл: предпочитайте WebP или вектор (.svg → vector drawable). Имена файлов — только строчные латинские буквы, цифры и подчёркивания (ic_profile.png).
- Для обычной картинки:
- В Android Studio: app → src → main → res → drawable — перетащите файл или правый клик → Reveal in Finder/Explorer → вставить и синхронизировать.
- Убедитесь, что ресурс доступен как R.drawable.ic_name.
- Для иконки приложения:
- Правый клик по модулю app → New → Image Asset → Launcher Icons (Adaptive and Legacy).
- Загрузите foreground/background или SVG, нажмите Next → Finish. Иконки появятся в mipmap-* и (при необходимости) в манифесте.
- Проверка: в 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.