这一直困扰着我。我希望能够在一个或另一个布局中相对于彼此定位ImageViews,这并不重要。请注意,我不能使用RelativeLayout的规则,因为我想要实现的更复杂一些。一个ImageView的位置取决于另一个ImageView的位置和给定的角度。我已经尝试自己定位第一个ImageView,然后相对于已放置的第一个或另一个ImageView定位其余的ImageView。这是通过覆盖我的自定义ImageView类中的onLayout方法完成的,如下所示:
@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等的“生命周期”有任何好的消息来源或解释,我会贬低它!