2011-12-27 3 views
1

У меня есть ImageView, который отобразит изображение из Интернета. Я использовал AsyncTask для загрузки изображения и рендеринга изображения в событии AsnycTask для onPostExecute. Изображение, загруженное из Интернета, может быть очень большим по размеру и не может быть декодировано в телефоне, поэтому я должен знать размер изображения и изменять размер изображения во время выполнения.Каков наилучший способ получить размер представления в Android-приложении?

The View класс имеет GetWidth и GetHeight методы, но я не знаю, когда это безопасно для их вызова. Я попытался вызвать эти методы в содержащемся фрагменте onCreateView, но оба возвращают 0; если я вызову эти методы в событии onPostExecute AsyncTask, возвращаемое значение будет ненулевым и правильным.

Итак, я думаю, когда лучше всего назвать эти методы и получить размер представления.

ответ

0

Это одно из того, что делает андроид действительно ужасно. Нет никакого крючка, к которому вы можете получить доступ, чтобы определить, когда фактическое измерение, активность или фрагмент были измерены. Лучше всего установить размер по умолчанию для представления изображения в dp (желательно в xml, но вы также можете делать это программно с помощью LayoutParams). Затем, как предложил Пареш, вы можете просто использовать scaleType для изменения размеров изображений.

Если вы действительно хотите получить ширину и высоту представления, вам нужно будет подклассифицировать представление и переопределить onSizeChanged и делать то, что вы хотите сделать на основе ширины и высоты там.

Имейте в виду, что если вы загружаете несколько действительно больших изображений из Интернета, а затем изменяете их размер, используя только изображения видов scaleType, вы, вероятно, столкнетесь с предупреждениями и исключениями памяти в некоторых телефонах. Вы можете взглянуть на следующий поток: Strange out of memory issue while loading an image to a Bitmap object

0

Вы должны называть их методом onPostExecute задачи async. Он возвращает 0 в onCreateView, поскольку представление пока еще не завышено.

+0

Но я также вижу случаи, когда возвращаемый размер равен 0 в методе onPostExecute. Вот почему я отправляю этот вопрос. Я хочу знать, когда можно получить значение размера – davidshen84

0

Если это возможно, установите атрибут android:scaleType="fitXY" в ImageView.

Смежные вопросы