[Compose Canvas] drawLine 사용해 직선 그리는 방법 한 번에 정리하기

2023. 7. 25. 21:59· Android Jetpack Compose UI/Compose Canvas
목차
  1. 직선의 구성
  2. drawLine 함수
  3. drawLine의 cap 파라미터 사용해 선 양끝의 모양 바꾸기
  4. pathEffect 사용해 선에 효과 부여하기
  5. drawLine 정리하기
반응형

직선의 구성

직선은 시작점과 끝점 그리고 선의 굵기로 이루어진다.

 

Compose의 Canvas에서도 같은 방식으로 직선이 그려진다. 자 어떻게 Canvas에서 직선을 그릴 수 있는지 살펴보도록 하자.

 

 

drawLine 함수

Canvas에서는 drawLine 함수를 사용해 직선을 그릴 수 있다.

fun drawLine(
    color: Color,
    start: Offset,
    end: Offset,
    strokeWidth: Float = Stroke.HairlineWidth,
    cap: StrokeCap = Stroke.DefaultCap,
    pathEffect: PathEffect? = null,
    /*FloatRange(from = 0.0, to = 1.0)*/
    alpha: Float = 1.0f,
    colorFilter: ColorFilter? = null,
    blendMode: BlendMode = DefaultBlendMode
)

 

start는 시작점이고, end는 끝점이다. strokeWidth는 선의 굵기이다. 이 세가지 속성을 사용하면 선을 그릴 수 있다. 예를 들어 시작점이 (100dp, 100dp)이고, 끝점이 (200dp, 100dp), 굵기가 10dp인 직선을 그려보도록 하자. 이는 다음과 같이 그릴 수 있다.

@Preview(showBackground = true)
@Composable
fun DrawLine() {
    Canvas(
        modifier = Modifier
            .size(300.dp)
            .background(Color.White),
        onDraw = {
            drawLine(
                color = Color.Blue,
                start = Offset(100.dp.toPx(),100.dp.toPx()),
                end = Offset(200.dp.toPx(),100.dp.toPx()),
                strokeWidth = 10.dp.toPx()
            )
        }
    )
}

 

이 코드는 다음의 직선을 만든다.

 

drawLine의 cap 파라미터 사용해 선 양끝의 모양 바꾸기

위 선은 이쁘지 않다. 양 끝이 너무 직각으로 되어 있기 때문이다. 이를 drawLine의 cap 파라미터를 바꿈으로써 변경 가능하다. 예를 들어 선 양끝에 라운딩 처리를 하고 싶으면 아래와 같이 cap에 StrokeCap.Round를 넘기면 된다.

@Preview(showBackground = true)
@Composable
fun DrawLine() {
    Canvas(
        modifier = Modifier
            .size(300.dp)
            .background(Color.White),
        onDraw = {
            drawLine(
                color = Color.Blue,
                start = Offset(100.dp.toPx(),100.dp.toPx()),
                end = Offset(200.dp.toPx(),100.dp.toPx()),
                strokeWidth = 10.dp.toPx(),
                cap = StrokeCap.Round
            )
        }
    )
}

 

그러면 선에 라운딩 처리가 되는 것을 확인할 수 있다.

 

pathEffect 사용해 선에 효과 부여하기

pathEffect를 사용하면 선을 점선으로 만들거나 스탬프 처리와 같은 효과를 부여할 수도 있다. 예를 들어 아래와 같이 PathEffect.dashPathEffect를 사용하면 선을 점선으로 만들 수 있다. 

@Preview(showBackground = true)
@Composable
fun DrawLine() {
    Canvas(
        modifier = Modifier
            .size(300.dp)
            .background(Color.White),
        onDraw = {
            drawLine(
                color = Color.Blue,
                start = Offset(100.dp.toPx(), 100.dp.toPx()),
                end = Offset(200.dp.toPx(), 100.dp.toPx()),
                strokeWidth = 10.dp.toPx(),
                cap = StrokeCap.Round,
                pathEffect = PathEffect.dashPathEffect(floatArrayOf(10f, 40f), 10f)
            )
        }
    )
}

 

위 코드는 선을 아래와 같이 점선으로 만든다. 잘 보이게 하기 위해 간격을 널찍하게 만들었다.

 

drawLine 정리하기

이번 글에서는 Jetpack Compose Canvas에서 직선을 그리기 위한 다양한 방법에 대해 살펴보았다. 직선은 모든 그림의 기본적인 구성요소이며, 우리가 그림판 같은 것들을 사용할 때도 그리는 모양들은 수없이 많은 직선으로 이루어진다. 

이번 글에서는 drawLine을 사용해 직선을 다양하게 만드는 방법에 대해 살펴보았다. 직선이 중요한 만큼 Canvas에서 직선을 다루는 방법도 제대로 알아두도록 하자.

반응형
저작자표시 비영리 변경금지
  1. 직선의 구성
  2. drawLine 함수
  3. drawLine의 cap 파라미터 사용해 선 양끝의 모양 바꾸기
  4. pathEffect 사용해 선에 효과 부여하기
  5. drawLine 정리하기


 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com

'Android Jetpack Compose UI/Compose Canvas' 카테고리의 다른 글
  • [Compose Canvas] Path란 무엇인가?
  • [Compose Canvas] rotateRad 사용해 캔버스에 그려진 도형 회전하기
  • [Compose Canvas] Canvas drawArc 사용해 부채꼴과 호 그리는 방법 한 번에 정리하기
  • [Compose Canvas] Canvas drawOval 사용해 타원 그리는 방법 한 번에 정리하기
Dev.Cho
Dev.Cho
'조세영의 Kotlin World'는 Kotlin를 전문적으로 다루는 개인 기술 블로그입니다. Kotlin 세계에 대한 양질의 자료를 제공하며 Kotlin, Android, Spring, CI, CD 분야에 대해 다룹니다.
Dev.Cho
조세영의 Kotlin World
Dev.Cho
전체
오늘
어제

블로그 메뉴

  • LinkedIn
  • GitHub
  • 분류 전체보기 (491)
    • Kotlin (104)
      • Class and Interface (19)
      • Variable and Function (8)
      • Modifier (5)
      • Collection (14)
      • Time (8)
      • 동시성 제어 (7)
      • Reactive Programming (2)
      • Paradigm (2)
      • Kotlin 자료구조 (15)
      • Design Patterns (11)
      • Algorithm (3)
      • Exception (1)
      • 기타 (9)
      • Update History (0)
    • Coroutines (32)
      • Coroutine Basics (18)
      • Flow (9)
      • CoroutineScope (3)
      • Debugging (2)
    • Testing Codes (28)
      • Test 기본 (3)
      • JUnit5 (9)
      • MockK (6)
      • Testing Coroutines (1)
      • Testing Android (8)
      • Test 기타 (1)
    • Spring (50)
      • Dependency Injection (18)
      • Settings (5)
      • REST API (0)
      • DevTools (1)
      • MVC (18)
      • Error (2)
      • MongoDB (2)
      • Database (4)
    • Android (39)
      • Architecture (2)
      • Component (5)
      • Manifest (1)
      • Lifecycle (2)
      • Dependency Injection (17)
      • Resource (1)
      • Storage (1)
      • Security and Optimization (1)
      • WebView (2)
      • Error (6)
    • Android Jetpack Compose (33)
      • Compose (6)
      • Compose Modifier (13)
      • Compose Resource (4)
      • Compose State (4)
      • Compose Side Effect (6)
    • Android Jetpack Compose UI (48)
      • Compose Layout (14)
      • Compose Text (10)
      • Compose Button (5)
      • Compose Dialog (2)
      • Compose TextField (0)
      • Compose UIs (4)
      • Compose Animation (1)
      • Compose Canvas (12)
    • Android Jetpack (10)
      • Datastore (5)
      • ViewModel (4)
      • LiveData (1)
      • Paging (0)
    • KMP (5)
    • Programming (4)
    • Machine (9)
      • JVM (7)
      • Linux (2)
    • CI, CD (74)
      • Gradle (12)
      • Groovy Gradle (5)
      • Git (25)
      • Git Remote (5)
      • GitHub (5)
      • GitHub Actions (21)
    • Network (33)
      • GraphQL (12)
      • HTTP (11)
      • Basic (9)
    • 오픈소스 (3)
    • Database (3)
      • MongoDB (3)
    • IDE (6)
      • Android Studio (2)
      • Intellij (4)
    • Firebase (1)
    • Javascript (9)

공지사항

  • 코틀린 코루틴 완전 정복 강의 in 인프런 오픈
  • 코틀린 코루틴의 정석 책 출간
  • Kotlin Coroutines 공식 기술 문서 한국어 번⋯
  • GitHub에서 조세영의 Kotlin World를 Foll⋯
  • 문의&제안

인기 글

태그

  • Jetpack Compose
  • Unit Testing
  • GraphQL
  • junit4
  • 스프링
  • HTTP
  • junit
  • Kotlin
  • 코루틴
  • compose
  • gradle
  • github actions
  • Dependency Injection
  • kotlin spring
  • GIT
  • Android Compose
  • dagger2
  • 안드로이드
  • Spring
  • Class
  • Android
  • Spring boot
  • github
  • junit5
  • 의존성 주입
  • Coroutine
  • java
  • 유닛 테스팅
  • flow
  • 코틀린

최근 글

반응형
hELLO · Designed By 정상우.v4.3.0
Dev.Cho
[Compose Canvas] drawLine 사용해 직선 그리는 방법 한 번에 정리하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.