Log.i(TAG,iv.getHeight()+"/"+iv.getTop());
이미지뷰는 Oncreate에서 레이아웃 안에다 addView로 넣어줬구요
addView 다음줄에 써주면 될거같은데 0만 주네요
값을 언제 어디서 가져와야 하는지 좀 가르쳐주세요 ㅠㅠ
onLayout 을 이용할수도 있고.. 정상적인 방법으로 풀 방법도 많습니다. 로직이 아닌 문제 해결을 위해 timer 나 sleep 등을 이용하는것은 좋지 않은 방법입니다.
// darklake 지적 감사드립니다. 로직이 아닌 문제해결을 위해 timer 또는 sleep을 이용하는것은 좋지 않은 방법이라는것에 동의합니다.
길게 설명하지 않고 필요한 부분만 설명하다 보니... 오해를 불러 일으킨것 같은데요...
안전한 리턴을 위해 delayed로 사용했지만 delayed가 아니어도 됩니다. 말씀하신 sleep의 이용없이 가능합니다.
예전에 handler 루핑 시작 시점을 테스트해본 결과 onResume 호출뒤에 message handle을 시작하는것 같았습니다.
onCreate 초입에 handle 메세지를 보내고 긴 시간후에 onResume이 리턴되어도 message handle은 onResume 리턴뒤에 실행되더군요
물론 onMeasure onLayout 등의 메서드 오버라이드로 뷰가 요구하는 크기를 반환할때 값을 이용할수 있지만...
단순히 해당 뷰의 크기나 위치값을 얻기위해 그 클래스를 상속해서 새로운 클래스를 만들고 필요한 해당 메서드를 오버라이드하고 값을 주고받고...
사용하던 뷰의 특성이 바뀌어 다른뷰를 사용하게 되면 상속부터 오버라이드 단계까지 다시 해야합니다..
과연 단순 크기 및 위치값을 얻는데 해당 컴포넌트의 클래스 확장과 메서드 오버라이드를 해야하는가...라는 의문이 들면서
저는 이게 배보다 배꼽이 더 큰 경우라고 생각되었습니다.
이미 존재하는 메서드를 이용해서 값을 취할수 있다면 이게 옳은 방법이라고 생각되었습니다.
onCreate상에서는 아직 화면에 표시되지않은 단계기 때문에 뷰의 사이즈를 구해 올수 없습니다.
>>>onResume에서 아무것도 안한다는 가정하에
핸들러를 이용해서 onCreate 마지막 라인에서 delayed메세지를 15ms정도로 보내면 onCreate가 리턴되고 onResume도 리턴된 후에 핸들러에서 해당 처리를 할 수 있습니다. 이때는 화면에 표시된 후 이니 뷰의 사이즈를 구할수 있구요. 이단계에서 뷰의 사이즈를 구하고 원하는 행동을 하시면 됩니다.