티스토리 뷰
Android 에서는 이런저런 이유로 view의 위치값을 필요로 한다.
그래서 있는것이 view.getLeft(), view.getRight(), view.getTop(), view.getBottom() 이다.(좌,우,상,하)
하지만 이것은 상위Layout에서 해당 view가 위치하는 값이므로 상대값이지 절대값이 아니다.
또한 터치나 제스처에서는 X , Y 값을 받지만 이것또한 절대값이 아니다.
이벤트에서 rawX, rawY 를 구할 수도있지만, 항상 절대값은 아니다.
1. 함수이용
View.getGlobalVisibleRect(Rect) 을 이용해서 좌표를 구해올수있다.
Global이라고해도 스크린상의 절대좌표는 아니고. 해당 RootView 레이아웃을 기준으로한 좌표다.
2. 직접계산
그래서 view.getRootView() 와 view.getParentView() 를 이용하여 수동으로 절대값X,Y를 구할 수 있다.
아래 코드는 오래전 작성해놓은것이지만....
public void toViewRawXY(View view){ View parentView = view.getRootView(); int sumX = 0; int sumY = 0; boolean chk = false; while (!chk) { sumX = sumX + view.getLeft(); sumY = sumY + view.getTop(); view = (View) view.getParent(); if(parentView == view){ chk = true; } } android.util.Log.d("","rawX : "+sumX); android.util.Log.d("","rawY : "+sumY); } |
3. 솔찍히 위에 방법 다 필요없고 더 정확하다 이거하나면 된다. 1,2번은 쓰지말기를.
View.getLocatioinOnScreen(int[]);
이러면 뷰가 스크린상 위치하는 좌표를 알 수 있다. TouchEvent에서 들어온 x,y 좌표들과 동일한 체계가 된다.
그래서 예를 들어 TouchEvent 해당 View안에서 일어났는지 알기위해서는 이런코드면된다.
public boolean chkTouchInside(View view, int x, int y) { int[] location = new int[2]; view.getLocationOnScreen(location); if (x >= location[0]) { if (x <= location[0] + view.getWidth()) { if (y >= location[1]) { if (y <= location[1] + view.getHeight()) { return true; } } } } return false; } |
[작성자] devbible.tistory.com
'Development' 카테고리의 다른 글
[Android] 타 어플의 Activity 실행 (0) | 2011.10.26 |
---|---|
[Android] performClick() (0) | 2011.10.26 |
[Android] intent 활용 (0) | 2011.10.19 |
[Android] 투명Activity 에 흐린효과주기 (0) | 2011.10.18 |
[Android] Broadcast 의 활용 : activity 종료하기 , 어플 종료하기 (1) | 2011.10.04 |
댓글
최근에 올라온 글
글 보관함
- Total
- Today
- Yesterday