2016-10-20 5 views
1

나는 활동의 주요 XML 파일을 통해 ImageView을 삽입했습니다. 상위 왼쪽 모서리와 정렬되지만 위쪽 여백과 왼쪽 여백은 16dp으로 설정됩니다. 이 뷰를 화면 주위로 드래그하고 놓을 때 초기 위치로 애니메이션을 적용합니다.보기에 여백이있는 경우보기의 X 좌표를 얻는 방법은 무엇입니까?

하드 코딩하지 않고 어떻게 초기 X 값을 찾을 수 있습니까? dp 픽셀을 간단한 픽셀로 변환 한 후 올바른 값은 42 픽셀입니다. myImageView.getX() 메서드를 호출하면 0.0을 반환합니다.

+0

나는'MarginLayoutParams'에서 그것을 읽어 마진 값을 찾을 수 있습니다,하지만 X를 읽을 수있는 방법은 무엇입니까? – wilkas

답변

1

보십시오 당신은 getLeft()getTop() 그의 부모에 view의 위치를 ​​얻을 수 있습니다

Rect targetRect = new Rect(); 
    myImageView.getLocalVisibleRect(targetRect); 

    int x = myImageView.getTop()); 
    int y = myImageView.getLeft(); 
+0

이유는 모르지만 0 값도 반환합니다. 나는 또한 다른 Rect 검색 방법을 시도했다. (글로벌, 드로잉 ...) – wilkas

+1

어디에서 coords를 얻으려고 하는가? 레이아웃이 계산되지 않은 것 같습니다. OnWindowFocusChanged 콜백 시도하기 https://developer.android.com/reference/android/app/Activity.html#onWindowFocusChanged%28boolean%29 –

+0

처음에는 onCreate의 끝에서 시도했지만, 이제는 onWindowFocusChanged()에서도 시도해 보았습니다. '- 여전히 0을 반환하지만, getLeft()를 사용할 때 올바른 값을 반환하고 getGlobalVisibleRect()를 사용할 때 올바른 값을 반환합니다. 포인터 주셔서 감사. 둘 다 부분적으로 정확하기 때문에 정답을 지정할 사람을 알지 못합니다. – wilkas

1

에 의해 위치를 얻을 수 있습니다. 구글 현상 문서에서

:

방법을 메쏘드 getLeft() 및 getTop()를 호출하여 볼의 위치를 ​​검색 할 수있다. 전자는 뷰를 나타내는 직사각형의 왼쪽 또는 X 축 좌표를 반환합니다. 후자는 을 반환하며 뷰를 나타내는 사각형의 위쪽 또는 Y 좌표를 반환합니다. 이 메소드는 모두 부모를 기준으로보기의 위치를 ​​반환합니다. 예를 들어, getLeft()가 20을 반환하면 뷰 은 직접 부모의 왼쪽 가장자리 오른쪽으로 20 픽셀 떨어져 있습니다.

이것은 다음과 같은 코드를 가진 X 얻을 수 있다는 것을 의미합니다 :

int x = imageView.getLeft(); 
+0

'getLeft()'도 'getX()'와 같은 0을 반환합니다. – wilkas

+0

이 메서드는'onWindowFocusChanged()'에서 사용될 때 작동합니다. – wilkas