Ресурсы изображений и ImageBitmap

Последнее обновление: 04.04.2024

Изображение, которое мы хотим отобразить в нашем приложении, может располагаться в различных местах - это может быть сетевой проект, но также изображение может храниться в самом приложении. Для хранения изображений в проекте предназначена папка res/drawable:

drawable resorces in Jetpack Compose

По умолчанию в этой папке уже имеется определения векторной графики в виде файлов ic_launcher_background.xml и ic_launcher_foreground.xml, которые применяются для создания иконок приложения.

Теперь добавим в эту папку какой-нибудь файл изображения. Для этого скопируем файл изображения с расширением png или jpg и с помощью стандартной комбинации клавиш Ctrl+V добавим его в папку res/drawable. Также можно нажать на папку правой кнопкой мыши и в появившемся меню выбрать пункт Paste:

ресурсы изображений drawable в Jetpack Compose и Android

Далее при копировании файла нам будет предложено установить для него новое имя (по умолчанию подставляется текущее имя файла)

Добавление изображений в Android Studio в Jetpack Compose

Можно изменить название файла, а можно оставить так как есть. В моем случае файл называется forest.png. И затем нажмем на кнопку OK. И после этого в папку drawable будет добавлен выбранный нами файл изображения.

Изображения в Android Studio и Jetpack Compose

При добавлении графических файлов в эту папку для каждого из них 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 = "Зимний лес"
            )
        }
    }
}
Изображения в Image в Jetpack Compose и Kotlin в Android

BitmapPainter

Также для выведения изображения можно использовать класс 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 = "Зимний лес"
            )
        }
    }
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850