2011-12-27 4 views
1

웹에서 이미지를 표시하는 ImageView가 있습니다. AsyncTask를 사용하여 이미지를로드하고 이미지를 onPostExecute AsnycTask 이벤트로 렌더링합니다. 웹에서로드 된 이미지는 크기가 매우 커서 전화에서 디코딩 할 수 없으므로 런타임에 이미지보기의 크기와 이미지의 크기를 알아야합니다.Android 앱에서보기의 크기를 가져 오는 가장 좋은 방법은 무엇입니까?

보기 클래스는 getWidthgetHeight 방법이 있지만 그들을 호출하는 것이 안전 할 때 나도 몰라. 프래그먼트가 포함 된 조각 (onCreateView 이벤트)에서 이러한 메서드를 호출하려고 시도했지만 모두 0을 반환합니다. AsyncTask 이벤트의 onPostExecute 이벤트에서 이러한 메서드를 호출하면 반환 값은 0이 아니며 정확합니다.

그래서 이러한 방법을 호출하고보기의 크기를 얻는 것이 가장 좋은 시점이라고 생각합니다.

답변

0

이것은 안드로이드가 정말로 나쁘게하는 것들 중 하나입니다. 보기, 활동 또는 단편이 실제로 측정 된시기를 알기 위해 액세스 할 수있는 후크가 없습니다. 가장 좋은 방법은 이미지 뷰의 기본 크기를 dp로 설정하는 것입니다 (선호하는 xml이지만 LayoutParams를 사용하여 프로그래밍 방식으로 수행 할 수도 있음). 그런 다음 Paresh가 제안한 것처럼 scaleType을 사용하여 이미지의 크기를 조정할 수 있습니다.

실제로보기의 너비와 높이를 가져 오려면보기의 하위 클래스를 만들고 onSizeChanged를 재정의하고 너비와 높이를 기반으로 원하는대로 수행해야합니다.

웹에서 여러 개의 큰 이미지를 다운로드 한 다음 이미지보기 scaleType을 사용하여 크기를 조정하면 메모리 경고 및 예외가 발생할 수 있습니다. 다음 스레드를 살펴볼 수도 있습니다. Strange out of memory issue while loading an image to a Bitmap object

0

비동기 작업의 onPostExecute 메서드에서 호출해야합니다. 뷰가 아직 이미지로 팽창되어 있지 않으므로 onCreateView에서 0을 반환합니다.

+0

그러나 반환되는 크기가 onPostExecute 메서드에서 0 인 경우도 있습니다. 그것이 내가이 질문을 게시하는 이유입니다. 크기 값을 검색하는 것이 안전한 지 알고 싶습니다. – davidshen84

0

가능한 경우 속성을 ImageView에 설정하십시오.

관련 문제