Расположите ImageViews относительно друг друга - PullRequest
1 голос
/ 23 февраля 2012

Это меня давно беспокоило.Я хочу иметь возможность позиционировать ImageViews относительно друг друга в том или ином макете, не важно, какой именно.Обратите внимание, что я не могу использовать правила RelativeLayout для этого, поскольку то, что я хочу достичь, немного сложнее.Положение одного ImageView зависит от положения другого ImageView и заданного угла.Я попытался позиционировать первый ImageView самостоятельно, а затем остальные из них относительно первого или другого ImageView, который уже размещен.Это делается путем переопределения метода onLayout в моем пользовательском классе ImageView следующим образом:

@Override
protected void onLayout(boolean changed, int left, int top, int right,
        int bottom) {

String uri = "com.foo.bar:dimen/" + size;   
int sizeResource = getResources().getIdentifier(uri, null, null);

if ( this.getId() == rel_id ){

//Position this ImageView first, the others relative to this or each other
LayoutParams p = new LayoutParams(this.getResources().getDimensionPixelSize(sizeResource),
this.getResources().getDimensionPixelSize(sizeResource));
//TODO: Remove hard coding
p.topMargin = 10;
p.leftMargin = 10;
this.setLayoutParams(p);

}
else{

//calculate x_position using the ImageView's width, height, leftMargin and a given relative angle
//calculate y_position using the ImageView's width, height, topMargin and a given relative angle

LayoutParams p = new LayoutParams(this.getResources().getDimensionPixelSize(sizeResource),
this.getResources().getDimensionPixelSize(sizeResource));   
p.topMargin = y_position;
p.leftMargin = x_position;
this.setLayoutParams(p);

}

}

Проблема в том, что onLayout вызывается дважды, когда он добавляется в мой LinearLayout или RelativeLayout, а также ширину и высоту каждогоImageView каждый раз разные и, следовательно, позиционирование становится неправильным.Это как-то связано с onMeasure?Как я могу обойти эту проблему?

Если у вас есть хорошие источники или объяснения о «жизненном цикле» onMeasure, onLayout, onDraw и т. Д., Я оценю его!

...