Jetpack Compose를 사용한 커스텀 컴포저블
첫 번째 기사 시리즈에서는 Jetpack Compose에서 맞춤 보기를 만드는 방법에 대해 이야기하고 싶습니다.
Labeled Ranged Slider의 예에서는 완전히 맞춤설정된 컴포저블을 만드는 데 필요한 단계를 살펴봅니다. Compose의 범위 슬라이더의 현재 버전은 부동 범위만 제공하고 선택한 범위에 따라 표시를 변경하여 단계적으로 정렬된 레이블을 표시하는 쉬운 방법이 없기 때문에 이 예를 선택했습니다.
이 시리즈의 결과는 다음과 같습니다.
컴포저블을 생성하는 데 사용되는 세 가지 다른 주제를 살펴보고 마지막에는 모두 함께 모을 것입니다.
(새롭고 재미있으니까 :-D)
모든 코드와 프로젝트는 우리가 진행하는 동안 GitHub에 게시될 것입니다.
캔버스에 그리는 방법
컴포저블 내의 캔버스에 무언가를 그리는 방법부터 살펴보겠습니다.
첫 번째 간단한 단계로 원과 같은 기본 모양을 그립니다. 이를 위해 우리는
컴포저블 만들기
@Composable
fun DrawSimpleCircle(
color: Color,
modifier: Modifier = Modifier,
minSize: DpSize = DpSize(32.dp, 32.dp)
) {
Canvas(modifier = modifier.size(minSize)) {
drawCircle(color)
}
}
이 컴포저블의 결과는 지정된 색상의 원이 되어 전체 컴포저블의 크기를 채웁니다.
또한 이 API를 사용하면 단일 색상으로 모양을 그릴 수 있을 뿐만 아니라 더 유연한 브러시 변형도 제공합니다. 브러시를 사용하면 그래디언트도 얻을 수 있습니다. 이 예는 두 가지 색상의 그라데이션을 보여주지만 API는 원하는 경우 다양한 색상 목록을 허용합니다.
...
drawCircle(
brush = Brush.radialGradient(
colors = listOf(
centerColor, outerColor
)
)
)
Compose의 캔버스는 물론 원만 그릴 수 있는 것은 아닙니다. 다양한 그리기 방법을 제공합니다. 다음은 제공 방법의 예와 그 모양입니다.
drawRect
drawRoundRect
그리기선
drawOval
drawArc
...
drawArc(
color = color,
startAngle = 180f, // 0f is at 3 o'clock of the circle
sweepAngle = 180f, // go 180° from startAngle
useCenter = false, // whether to fill the arc or not
style = Stroke(width = 2.dp.toPx())
)
drawPath
...
val path = Path().apply {
lineTo(size.width, 0f) // line from start to end
quadraticBezierTo( // arc from the top to bottom
size.width / 2, size.height / 2,
size.width, size.height
)
lineTo(0f, size.height) // line from end to start
quadraticBezierTo( // arc from bottom to top
size.width / 2, size.height / 2,
0f, 0f
)
close() // link end to start
}
drawPath(
color = color,
path = path,
style = Stroke(width = 2.dp.toPx())
)
드로포인트
그리기 개요
그리기 이미지
...
drawImage(
image = image,
dstSize = IntSize(size.width.toInt(), size.width.toInt()),
colorFilter = ColorFilter.lighting(Color.Yellow, Color.Red)
)
네이티브 캔버스
Canvas Composable 내에서 직접 제공되지 않는 유용한 그리기 기능 중 하나는 텍스트를 그리는 기능입니다. 하지만 drawIntoCanvas 메서드를 사용하면 여전히 이를 달성할 수 있습니다. drawText 메서드를 제공하는 기본 Canvas에 대한 액세스를 제공합니다.
중요 참고 사항: 기본 Canvas를 사용하는 경우 Compose 변형 대신 Paint 또는 Color 클래스를 사용하여 android.graphics 패키지에 의존해야 합니다.
Canvas(modifier = modifier.size(minSize)) {
val paint = android.graphics.Paint()
paint.textSize = textSize.toPx()
paint.color = android.graphics.Color.BLACK
drawIntoCanvas {
it.nativeCanvas.drawText(text, 0f, 0f, paint)
}
}
결론
캔버스와 기본 캔버스를 사용하여 레이블이 지정된 범위 슬라이더에 필요한 모든 것을 그릴 수 있습니다.
다음 부분에서는 터치 이벤트에 반응하여 맞춤 컴포저블을 대화형으로 만드는 방법을 살펴보겠습니다. .
이 게시물의 이미지를 만드는 코드는 GitHub에서 찾을 수 있습니다.
Reference
이 문제에 관하여(Jetpack Compose를 사용한 커스텀 컴포저블), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lex_fury/custom-composable-with-jetpack-compose-5d86텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)