Рисование. Canvas

Компонент Canvas и DrawScope

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

Jetpack Compose предоставляет возможность для отрисовки графики в мобильном приложении. Для этого применяется компонент Canvas. По сути данный компонент предоставляет поверхность для рисования 2D-графики и инструменты для управления состоянием графического контента.

Компонент Canvas имеет следующие формы:

@Composable
fun Canvas(modifier: Modifier, onDraw: DrawScope.() -> Unit): Unit

@Composable
fun Canvas(modifier: Modifier, contentDescription: String, onDraw: DrawScope.() -> Unit): Unit

Параметры компонента:

  • modifier: применяемые к компоненту функции модификатора

  • onDraw: лямбда-выражение, которое будет вызываться для отрисовки графических примитивов. Обратите внимание, что это лямбда-выражение будет вызываться на этапе рисования, а это означает, что вызов функции Composable внутри этого выражения приведет к исключению во время выполнения.

  • contentDescription: текст, используемый службами доступности для описания того, что представляет собой этот компонент.

Например, определим простейший компонент Canvas без какой-либо графики:

package com.example.helloapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.size
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp


class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Canvas(Modifier.size(300.dp).background(Color.LightGray)) {
                // здесь отрисовка графики
            }
        }
    }
}

В данном случае для комопнента Canvas определяется прямоугольная область 300х300, окрашенная серым цветом:

Canvas в Jetpack Compose на Kotlin на Android

DrawScope

Canvas имеет собственную область действия в виде объекта DrawScope, который предоставляет доступ к свойствам поверхности рисования:

  • center: центральная точка поверхности рисования в виде объекта Offset

  • drawContext: объект DrawContext, который представляет контекст отрисовки

  • layoutDirection: направление отрисовки в виде объекта LayoutDirection

  • size: размер поверхности рисования в виде объекта Size

DrawScope также предоставляет функции для рисования фигур и управления графикой. Отмечу только основные из них:

  • drawArc(): отрисовывает дугу

  • drawCircle(): отрисовывает круг

  • drawImage(): выводит изображение

  • drawLine(): рисует линию

  • drawOval(): отрисовывает овал

  • drawPath(): отрисовывает геометрический путь

  • drawPoints(): отрисовывает последовательность точек

  • drawRect(): рисует прямоугольник

  • drawRoundRect(): рисует прямоугольник с закругленными углами

  • drawOutline(): отрисовывает контур

  • drawText(): выводит текст

  • clipPath(): вырезает путь

  • clipRect(): вырезает прямоугольник

  • rotate(): применяет поворот

  • scale(): применяет масштабирование

  • translate(): применяет перемещение

Свойства и функции DrawScope мы можем использовать внутри лямбда-выражения из последнего параметра Canvas. Например, получим ширину и высоту Canvas:

Canvas(Modifier.size(300.dp).background(Color.LightGray)) {
    val height = size.height
    val width = size.width
}

В следущих статьях мы рассмотрим применение функций DrawScope для отрисвки и управления графикой.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850