Изображение, которое мы хотим отобразить в нашем приложении, может располагаться в различных местах - это может быть сетевой проект, но также изображение может храниться в самом приложении. Для хранения изображений в проекте предназначена папка res/drawable:
По умолчанию в этой папке уже имеется определения векторной графики в виде файлов ic_launcher_background.xml
и
ic_launcher_foreground.xml
, которые применяются для создания иконок приложения.
Теперь добавим в эту папку какой-нибудь файл изображения. Для этого скопируем файл изображения с расширением png или jpg и с помощью стандартной комбинации клавиш Ctrl+V добавим его в папку res/drawable. Также можно нажать на папку правой кнопкой мыши и в появившемся меню выбрать пункт Paste:
Далее при копировании файла нам будет предложено установить для него новое имя (по умолчанию подставляется текущее имя файла)
Можно изменить название файла, а можно оставить так как есть. В моем случае файл называется forest.png. И затем нажмем на кнопку OK. И после этого в папку drawable будет добавлен выбранный нами файл изображения.
При добавлении графических файлов в эту папку для каждого из них Android создает ресурс Drawable. После этого мы можем обратиться к ресурсу следующим образом в коде Kotlin:
R.drawable.имя_файла
Для отображения растровых изображений, а именно файлов png и jpg, в компоненте Image применяется интерфейс ImageBitmap.
Этот интерфейс предоставляет статический метод imageResource(идентификатор_ресурса)
для получения объекта ImageBitmap из ресурса drawable.
package com.example.helloapp import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.res.imageResource class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Image( bitmap = ImageBitmap.imageResource(R.drawable.forest), contentDescription = "Зимний лес" ) } } }
Также для выведения изображения можно использовать класс Painter, а точнее его класс-наследник BitmapPainter, который отрисовывает изображение. Данное изображение передается в виде объекта ImageBitmap в конструктор
BitmapPainter
в качестве параметра:
package com.example.helloapp import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.res.imageResource class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Image( painter = BitmapPainter(ImageBitmap.imageResource(R.drawable.forest)), contentDescription = "Зимний лес" ) } } }