Представления в Android не имеют фиксированного размера / позиции, как в Blackberry или iPhone; вместо этого они выложены динамически. Раскладка происходит намного позже, чем onCreate/onResume
, и теоретически может произойти много раз. Каждое представление имеет методы onMeasure
и onLayout
, которые отвечают за это. Только после возврата метода onLayout
вы можете определить размер и позицию представления. Перед этим размер представления равен 0, а позиция равна 0 (как вы заметили).
Так что бессмысленно пытаться получить размер ImageView в onCreate/onResume
, потому что onLayout
еще не был вызван.
Вместо этого переопределите onLayout
вот так и делайте там свои вещи:
public class MyImageView extends ImageView {
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
// at this point size and position are known
int h = getHeight();
int w = getWidth();
doSomethingCool(h,w);
}
}