본문 바로가기

ANDROID/UI - UX

[안드로이드 | 코틀린] 데이터바인딩을 사용할 때 Fragment 내의 View 좌표 가져오기

이번에 신규로 구현하는 페이지에서 유저의 터치에 따라

 

화면 내의 커서를 특정 위치로 보내야 하는 요구사항이 있었다.

 

 

터치를 받는 곳은 별도의 뷰에서 들어오는 것이었기에, 터치는 터치대로 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

 

How to set X axis labels in MP Android Chart (Bar Graph)?

This is with reference to the article : https://github.com/PhilJay/MPAndroidChart/wiki/Setting-Data under the heading Bar Graph.In the given code below: @Override public View onCreateView(

stackoverflow.com