안드로이드에서 커스텀 뷰를 만들 때,
특정 주기마다 View를 갱신하여 다시 그려야 할 때가 있다.
특히 이벤트 발생 시, 커스텀 뷰의 애니메이션 등을 구현할 때가 많다.
방법은 커스텀 뷰를 다시 그려야 할 때마다,
View 클래스에 정의된 invalidate() 메서드를 호출하는 것이다.
# View.invalidate() 메서드
View클래스에 정의된 Invalidate() 메서드를 호출하면,
해당 뷰 화면이 무효(invalid)임을 안드로이드에게 알리게 되고,
안드로이드는 현재의 뷰 상태를 반영하여 새로 화면을 그려준다.
View를 상속 받는 커스텀 뷰 클래스를 생성한 다음,
커스텀뷰를 다시 그려야 할 때마다 Invalidate() 메서드를 호출하도록 구현해주면 된다.
아래에 간단한 예제 코드를 작성해 봤다.
# 샘플 예제 코드
화면을 터치할 때마다, X좌표 값을 화면에 갱신하며 표시한다.
아래의 onTouchEvent() 메서드에서 invalidate()가 호출될 때마다 CustomView가 다시 그려진다.
class CustomView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {
// 터치 X좌표값을 저장할 변수
var coordsX: Float? = null
// 화면 그리기
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
// 텍스트 사이즈 설정
val paint = Paint()
paint.textSize = 30f
// coordX 변수에 저장된 값을 텍스트로 그린다.
canvas?.drawText("$coordsX", 100f, 100f, paint)
}
// 터치 이벤트 처리
override fun onTouchEvent(event: MotionEvent?): Boolean {
// 터치 X좌표 취득
coordsX = event!!.x
// ####### View 화면 다시 그리기
invalidate()
return true
}
}
이런 원리를 활용하여 사용자의 이벤트나 입력값이 변경될 때마다
invalidate()를 호출하여 뷰를 다시 그리면 커스텀 뷰의 애니메이션 등도 구현이 가능하다.
'개발(Development) > Android(안드로이드)' 카테고리의 다른 글
[안드로이드 코틀린] 커스텀 View 전용 속성 정의 및 사용 방법: attr.xml (0) | 2021.08.20 |
---|---|
[안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초 (0) | 2021.08.20 |
[안드로이드 코틀린] 코드에서 View 크기 dp 설정 방법: dimens.xml (0) | 2021.08.20 |
[안드로이드 앱] AAB 빌드 안될 때 해결 방법: keystore password was incorrect, getSecretKey failed: Password is not ASCII (0) | 2021.08.16 |
안드로이드스튜디오: 에뮬레이터 생성 및 실행 방법(AVD Manager) (0) | 2021.08.10 |
댓글