Сначала у меня есть пользовательский компонент, который показывает фотографии из Интернета.Это простой макет и включает в себя круговой индикатор выполнения и ImageView.В состоянии по умолчанию индикатор выполнения виден и отображается во время загрузки изображения, а когда он закончится, я скрываю индикатор выполнения и показываю изображение в ImageView.Он работает очень хорошо, но в эмуляторе и в HTC Hero я получил java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет виртуальной машины ошибка.Я нашел решение здесь .Но моя проблема в том, что TARGET_WIDTH и TARGET_HEIGHT не исправить, иногда 60x90, иногда fill_parent x fill_parent, и я не могу вычислить эти значения в функции декодирования.Например, я добавил свое представление в xml с layout_width = "fill_parent" и использую в Activity
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageLoader picture = (ImageLoader) findViewById(R.id.picture);
picture.load("http://winportal.net/images/galleries/wallpapers/Earth.jpg");
, а в методе загрузки я вызываю функцию декодирования из решения и пытаюсь вычислить размеры:
...
this.onMeasure(0, 0);
Log.d("Log", "Layout width: " + this.getMeasuredWidth());
TARGET_WIDTH = this.getMeasuredWidth();
...
и результат: " Ширина макета: 24 "
Я не понимаю, почему получил 24 bacause это ширина индикатора выполнения, но макет - которыйвключить его - это ширина fill_parent.Я попытался переопределить метод onMeasure, но получил 0.
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth, parentHeight);
}
Я попытался переопределить onSizeChanged тоже.Он дает хорошие значения, но запускается позже, после декодирования: (
Как рассчитать размер макета?