이번에 신규로 구현하는 페이지에서 유저의 터치에 따라
화면 내의 커서를 특정 위치로 보내야 하는 요구사항이 있었다.
터치를 받는 곳은 별도의 뷰에서 들어오는 것이었기에, 터치는 터치대로 Listen해
마찬가지로 별도의 뷰로 되어있는 인디케이터를 움직여야 했다.
이를 해결하기 위해 커서가 가장 좌측으로, 그리고 우측으로 최대한 움직였을 때의 위치를 더미 View를 사용해 지정하였고,
둘간의 좌표 차이를 활용해 커서를 수평이동 시키기로 했다.
서론은 이정도로 마치고 데이터바인딩된 Fragmet 레이아웃으로부터 특정 뷰의 좌표를 가져오기 위한 방법은
아래와 같다.
...
val binding = DataBindingUtil.inflate(inflater, R,layout.fragment_layout, container,false)
var startPosX
var endPosX
binding.root.viewTreeObserver.addOnGlobalLayoutListener {
// 필요한 상황에 따라 가져오고자 하는 좌표를 가지고 옴.
startPosX = binding.root.startView.x
endPosX = binding.root.endView.x
// 좌표를 가지고오는 상황 이외에 초기 좌표를 설정하고자 할 때에도
// listener 내부에 정의해야 적용이 되는 점 참조할 것.
// 예 : binding.root.sampleView.x = 원하는x좌표(float)
}
...
상기 코드는 Data binding을 활용했을 경우에 해당하지만,
Data binding을 사용하지 않는 일반 레이아웃에도 응용하여 적용이 가능할 것으로 보인다.
Fragment에서 Inflate하는 기본 view의 viewTreeObserver를 따오면 될듯?
참조 :
https://stackoverflow.com/questions/47637653/how-to-set-x-axis-labels-in-mp-android-chart-bar-graph
'ANDROID > UI - UX' 카테고리의 다른 글
[안드로이드 | 코틀린] 사용자 정의 커스텀 달력 만들고 ViewPager에 접목하기 (0) | 2019.11.04 |
---|---|
[안드로이드 | MpAndroidChart] 바 그래프의 하단 영역이 생길 때의 대처법 (0) | 2019.10.30 |
[안드로이드] ConstraintLayout 내부에 Fragment 알맞게 배치하기 (0) | 2019.10.15 |
[안드로이드] 사용자 기기의 글꼴 사이즈에 앱 대응하기 (0) | 2019.09.25 |
[안드로이드] RecyclerView의 사이즈를 애니메이션과 함께 바꾸기, 아이템이 추가될 때 애니메이션 적용하기 (0) | 2019.08.10 |