Отрисовка точек

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

Иногда бывает необходимо отрисовать отдельные точки. Для этого Compose предоставляет функцию drawPoints():

fun drawPoints(
    points: List<Offset>,
    pointMode: PointMode,
    color: Color,
    strokeWidth: Float = Stroke.HairlineWidth,
    cap: StrokeCap = StrokeCap.Butt,
    pathEffect: PathEffect? = null,
    alpha: @FloatRange(from = 0.0, to = 1.0) Float = 1.0f,
    colorFilter: ColorFilter? = null,
    blendMode: BlendMode = DefaultBlendMode
): Unit

Эта функция принимает следующие параметры:

  • points: список точек для отрисовки, где каждая точка представляет объект Offset

  • pointMode: тип точек. Указывает, будет ли каждая точка отображаться отдельно (режим PointMode.Points) или соединяться линиями с использованием режимов PointMode.Lines и PointMode.Polygon

  • color: цвет пути

  • strokeWidth: ширина линий между точками

  • cap: тип завершения линий между точками

  • alpha: прозрачность, применяемая к цвету точек в виде значения из диапазона от 0.0f до 1.0f

  • style: стиль заполнения точек

  • colorFilter: цветовой фильтр ColorFilter, который применяется к цвету точек

  • blendMode: алгоритм смешивания, применяемый к цвету

Например, следующий код отображает синусоидальную волну, состоящую из отдельных точек:

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
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.PointMode

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Canvas(Modifier.size(300.dp).background(Color.LightGray)) {
                val height = size.height
                val width = size.width
                val points = mutableListOf<Offset>()

                for (x in 0..size.width.toInt()) {
                    val y = (kotlin.math.sin(x * (2f * 3.1415 / width)) * (height / 2) + (height / 2)).toFloat()
                    points.add(Offset(x.toFloat(), y))
                }

                drawPoints(
                    points = points,
                    strokeWidth = 4f,
                    pointMode = PointMode.Polygon,
                    color = Color.Blue
                )
            }
        }
    }
}
Canvas и drawPoints и рисование точек в Jetpack Compose на Kotlin на Android
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850