-
[Android] Custom View와 Activity의 좌표가 다른 문제Android📱 2022. 3. 18. 20:29
🤭 문제 발생
드로잉 앱을 구현하다가 문제에 봉착했다.
액티비티에 있는 사이드바에 그림에 대한 정보를 표기해야하는데 그러려면 커스텀 뷰에서 액티비티를 참조하는 방법 밖에 떠오르지가 않았다. 하지만 그러면 구조상 MVP를 위배하는 느낌도 있고 뷰가 액티비티를 참조하는 구조는 좋지 않아보여서 고민을 하다가 결국 액티비티에서 터치이벤트를 처리했는데, 문제가 발생하였다.
커스텀뷰의 좌표와 액티비티의 좌표가 다른것 ㄷㄷ
사이드바가 하나일때는 대충 계산해서 처리했는데 ㅠ 오른쪽에 리사이클바를 넣었더니 좌표가 다시 바뀌어서 이건 아니다라고 판단
콜백을 이용해보기로 하고 다시 고민을 해보았다.🤗 콜백 학습 후 문제 해결
그리고 지금 고민해결!!
처음에 프로젝트를 시작할때는 콜백, 옵저버에 대한 개념이 부족해서 터치 리스너를 사용하지 못하고 그냥 넘어갔는데 이제는 알고 있으니 금방 해결이 되었다.setOnTouchListener를 통해서 커스텀뷰의 터치이벤트를 뷰에서 처리하도록 바꾸었더니 좌표가 잘 맞았다.
그중에 공부한 내용은 커스텀 뷰에 performClick()을 상속 받아서 구현을 해주어야 한다는 것
누군가에게는 너무 기초적인 내용일 수 있지만, 미래의 나를 위해 혹시 고민하고 있을 누군가를 위해 기록해본다.
그냥 setOnTouchListener를 만들면 저렇게 주의 표시가 뜨는데 이는 터치 이벤트가 제대로 처리되지 않을 수 있어서 뜨는 경고이다.
그래서
이렇게 커스텀뷰에서 performClick()를 오버라이드해서 만들어주고 다시 액티비티에서

이렇게 사용해주면 경고가 사라진다.
강제로 터치를 일으켜서 혹시 터치이벤트가 안 일어나는것을 방지하는 것인데
저 부분은 코드를 따라가 보며 조금 더 공부를 해보아야겠다.'Android📱' 카테고리의 다른 글
[안드로이드] Context (0) 2022.03.28 [ERROR] Can't toast on a thread that has not called Looper.prepare() (0) 2022.03.25 [안드로이드 오류] Cannot resolve symbol (0) 2022.03.12 [Adroid] Live Data 실험해보기 (0) 2022.03.09 [Android] Call Back 함수공부 (0) 2022.03.06