IT/Android (안드로이드)

Android N.3-3 Drawing on Canvas Object

Edmond Na 2025. 4. 21. 23:24

* 2021. 3. 9 작성

 

### #0 Android Canvas 란?

Canvas는 안드로이드 플랫폼에 포함되어있는 클래스로써 2차원적인 오브젝트를 화면에 그리는 것을 돕습니다. 일종의 도화지라고 생각하시면 편합니다.


### #1 Canvas 사용법

안드로이드에서 캔버스를 사용하기 위해서는 아래와 같은 것들이 필요합니다.

1.  **Bitmap**  또는  **View**  : 캔버스에 그려질 픽셀들을 관리
2.  **Canvas**  : 그리기 명령어를 수행하기 위함
3.  **그리기 명령**  : 캔버스에 무엇을 그릴 것인지 나타낸다.
4.  **Paint**  : 그리기 명령을 어떻게 꾸밀것인지 묘사합니다.


먼저 캔버스 인스턴스에 접근을 해야하는데 캔버스 인스턴스에 접근하기 위해서는 기존 View클래스를 확장해야합니다. onDraw메소드를 재정의 하여 Canvas를 파라미터로 얻을 수 있기 때문입니다.

``` kotlin
class CustomView @JvmOverloads constructor(context: Context,
    attrs: AttributeSet? = null, defStyleAttr: Int = 0)
    : View(context, attrs, defStyleAttr) {

    // 뷰의 내용이 렌더링 될때 호출 됩니다
    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
// Content
    }
}
```

레이아웃 XML에서 이 커스텀뷰를 사용할 수 있고 자동으로 onDraw가 호출되어 화면에 나타나게 될것입니다.

``` xml
<com.worldSkills.CustomView
        android:layout_width="200dp"
        android:layout_height="300dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>
```

그러고 난 다음 코드로 캔버스를 만들고 캔버스 객체에 접근할 수 있습니다.

``` kotlin
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) 
val canvas = Canvas(bitmap)
```


해당 캔버스에 drawBitmap 메서드를 사용하면 쉽게 draw 할 수 있습니다.
코드의 두번째 인자로 그리고 싶은 비트맵의 일부를 전달 할 수 있는데, null을 넘기면 bitmap 전체를 렌더링 하게 됩니다. 세번째 인자는 RectF 객체로 화면에 그리고 싶은 비율과 위치를 결정합니다.

``` kotlin
canvas.drawBitmap(bitmap, null, rect, paint)
```