안드로이드에서
코틀린으로 커스텀뷰를 만들고, 이벤트 리스너를 등록하는 방법은 아주 간단하다.
단, 이 글은 커스텀뷰의 기초를 안다는 전제하에 작성되었다.
커스텀뷰 사용 방법은 아래 글을 참고하자.
[안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초
[안드로이드 코틀린] 커스텀 View 전용 속성 정의 및 사용 방법: attr.xml
[안드로이드 코틀린] 커스텀 View 화면 갱신 방법(새로 그리기): invalidate()
# 커스텀 뷰에 터치이벤트 리스너 설정 방법
1. 커스텀뷰 클래스 생성
2. onTouchEvent() 메서드 정의
- View 클래스에 정의된 onTouchEvent() 메서드는 뷰에 터치이벤트가 발생할 때마다 콜백된다.
- onTouchEvent() 메서드를 오버라이딩 하여, 필요한 이벤트 처리 코드를 넣어두면 된다.
< 전체 코드>
class CustomView: View {
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
val paint = Paint()
paint.color = Color.BLUE
paint.textSize = 40f
canvas?.drawText("터치이벤트 발생", 100f, 100f, paint)
}
// 터치 이벤트 처리
override fun onTouchEvent(event: MotionEvent?): Boolean {
// Toast 띄우기
Toast.makeText(context, "터치 이벤트 발생", Toast.LENGTH_SHORT).show()
return true
}
}
3. 터치이벤트의 종류 및 좌표 취득 방법
- onTouchEvent(event: MotionEvent?) 메서드의 매개변수로 들어오는 MotionEvent객체에는 발생한 터치 이벤트의 종류와 좌표 정보가 저장되어 있다.
- 이벤트 종류는 event.action 로 확인할 수 있다.
- 이벤트 좌표는 event.x, event.y 로 취득할 수 있다.
* 터치 이벤트 종류는 다음과 같다
- MotionEvent.ACTION_DOWN
- MotionEvent.ACTION_MOVE
- MotionEvent.ACTION_UP
- MotionEvent.ACTION_CANCEL
- 터치 이벤트가 발생할 때마다 이벤트의 종류 및 좌표를 출력하는 예제.
class CustomView : View {
// 생성자
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
// 터치 이벤트 정보를 담아둘 변수
var coords: PointF? = null
var action: String? = ""
// 뷰 그리기
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
val paint = Paint()
paint.color = Color.BLUE
paint.textSize = 40f
canvas?.drawText("$action ${coords?.x}, ${coords?.x}", 100f, 100f, paint)
}
// 터치 이벤트 처리
override fun onTouchEvent(event: MotionEvent?): Boolean {
// 1. 터치 좌표 취득
coords = PointF(event!!.x, event!!.y)
// 2. 터치 이벤트 종류 취득
when (event.action) {
MotionEvent.ACTION_DOWN -> {action = "ACTION_DOWN"}
MotionEvent.ACTION_MOVE -> {action = "ACTION_MOVE"}
MotionEvent.ACTION_UP -> {action = "ACTION_UP"}
MotionEvent.ACTION_CANCEL -> {action = "ACTION_CANCEL"}
}
// 3. View 화면 갱신
invalidate()
return true
}
}
<실행 결과>
'개발(Development) > Android(안드로이드)' 카테고리의 다른 글
[안드로이드] 원형 프로그레스바 테두리 끝 둥글게 Roound 처리 방법 (0) | 2021.08.21 |
---|---|
[안드로이드] 커스텀 원형 프로그레스 바(도넛 그래프) 만드는 방법 (0) | 2021.08.21 |
[안드로이드 코틀린] 커스텀 View 전용 속성 정의 및 사용 방법: attr.xml (0) | 2021.08.20 |
[안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초 (0) | 2021.08.20 |
[안드로이드 코틀린] 커스텀 View 화면 갱신 방법(새로 그리기): invalidate() (0) | 2021.08.20 |
댓글