Canvas와 Paint

sumi Yoo·2022년 9월 22일
0

Canvas와 Paint


  • Canvas, 무엇을 그릴지를 나타냄
  • Paint, 어떻게 그릴것인지를 나타냄

예를들면 Canvas는 선을 그리면, Paint는 그 선이 어떠한 색으로 결정 될지 나타내는 것이다.

private fun drawImage(canvas: Canvas?, image: Image?, flag: Boolean = false) {
        paint.reset()
        if (flag) {
            paint.alpha = DRAG_ALPHA
        } else {
            paint.alpha = image?.alpha ?: 0
        }
        image?.source?.let { sc ->
            canvas?.drawBitmap(sc, image.point.x.toFloat(), image.point.y.toFloat(), paint)
        }
    }

주의할점

paint의 alpha 값의 범위는 (0~255) 이다.
이 범위에서 벗어나면 무조건 0이 되어버린다.

draw...


onDraw() 메소드는 다음과 같은 기능이 있다

  • drawText()를 활용하면 텍스트를 그릴 수 있다. setTypeface()를 호출하여 글꼴을 지정하고, setColor()를 호출하여 색상을 지정한다
  • drawRect(), drawOval(), drawArc() 를 이용하여 네모, 타원, 호 등을 그릴 수 있다. setStyle()을 사용하여 윤곽선만 그리는지 도형을 채우는지 등 정할 수 있다
  • 원하는 모양이 미리 정의된게 없으면 Path 클래스를 이용하자 Path객체에 선과 곡선들을 추가한 다음 drawPath()를 사용하면 원하는 도형을 그릴 수 있다. 마찬가지로 setStyle()로 윤곽선만 표시하거나 색상을 채우거나 또는 둘다 할 수 있다
  • LinearGradient 객체를 활용하여 그라데이션을 정의 해 줄 수 있다. 그라데이션을 사용하고 싶으면 setShader()를 호출한다
  • drawBitmap()을 사용하여 비트맵을 그린다
    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)

        canvas.apply {
            // Draw the shadow
            drawOval(shadowBounds, shadowPaint)

            // Draw the label text
            drawText(data[mCurrentItem].mLabel, textX, textY, textPaint)

            // Draw the pie slices
            data.forEach {
                piePaint.shader = it.mShader
                drawArc(bounds,
                        360 - it.endAngle,
                        it.endAngle - it.startAngle,
                        true, piePaint)
            }

            // Draw the pointer
            drawLine(textX, pointerY, pointerX, pointerY, textPaint)
            drawCircle(pointerX, pointerY, pointerSize, mTextPaint)
        }
    }

참고자료

0개의 댓글

관련 채용 정보