Создание реактивного ранца рисование на изображении с помощью Painter

#android #android-jetpack-compose

#Android #android-jetpack-compose

Вопрос:

С помощью painter можно рисовать на ImageBitmap с помощью фрагмента

    val imageBitmap: ImageBitmap = imageResource(id = R.drawable.landscape3)

    val customPainter = remember {
        object : Painter() {

            override val intrinsicSize: Size
                get() = Size(imageBitmap.width.toFloat(), imageBitmap.height.toFloat())

            override fun DrawScope.onDraw() {
                drawImage(imageBitmap)
                drawLine(
                    color = Color.Red,
                    start = Offset(0f, 0f),
                    end = Offset(imageBitmap.width.toFloat(), imageBitmap.height.toFloat()),
                    strokeWidth = 5f
                )
            }
        }
    }
    Image(painter = customPainter, contentDescription = null)
 

loadFontResource устарел. Вместо этого используйте fontResource.
ImageResource, loadImageResource, vectorResource и
loadVectorResource устарели. Вместо этого используйте painterResource.
(I6b809)

использование alpha12 imageResource устарело. painter drawImage(imageBitmap) функция, которая рисует изображение, не имеет замены или другая функция, отличная от той, которая принимает ImageBitmap в качестве параметра?

В чем смысл ImageBitmap начиная с alpha12, поскольку не существует устаревшей функции для ее создания с помощью ресурса, а функция для получения ImageBitmap от Painter не существует.

Ответ №1:

начиная с Compose UI 1.0.0-beta01

ImageResource и vectorResource теперь являются функциями расширения в компаньонах ImageBitmap и ImageVector соответственно. функции ресурсов load{Image,Vector,Font} были удалены. (I89130)

 import androidx.compose.ui.res.imageResource
// ...
val imageBitmap: ImageBitmap = ImageBitmap.imageResource(R.drawable.landscape3)
 

painterResource под капотом вызывает imageFromResource, так что мы тоже можем его использовать:

   val imageBitmap: ImageBitmap = imageFromResource(
    LocalContext.current.resources,
    R.drawable.landscape3
  )
 

Комментарии:

1. Да, похоже, это тот, который будет использоваться для создания ImageBitmap.

2. По состоянию на beta01, я думаю, он исчез. Разве нет способа создать композицию, чтобы получить ImageBitmap из ресурсов или чертежей?

3. @Thracian Теперь это функция расширения imageResource .

Ответ №2:

Я использую этот метод для использования растрового изображения или SVG

 Image(
    painterResource(id = R.drawable.video),
    contentDescription = "",
)
 

Ответ №3:

при стабильной версии Compose 1.0 и выше вы должны использовать

useResource("image.png") { loadImageBitmap(it) }

это вернет ImageBitmap объект.

Существует также painterResource("image.png") , но это вернет Painter объект.

Ответ №4:

если вам нужно установить ImageVector из папки для рисования, используйте:

 ImageVector.vectorResource(id = R.drawable.ic_example)
 

ic_example — векторный файл «.xml», добавленный из файла svg