在我的布局中,我有一个包含4个自定义ImageView的GridView。我将GridView的可见性设置为不可见,直到所有ImageViews首先被调整大小,但是当显示GridView时,ImageView仍然保持不变,只是短暂闪烁。在绘制之前调整视图大小
每个ImageView的创建单独的侦听器,以扩展其大小:
//Setting new params as half of parent's size and increasing counter
if (getViewTreeObserver().isAlive()) {
final ViewTreeObserver viewTreeObserver = getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
getViewTreeObserver().removeOnPreDrawListener(this);
View parent = (View) getParent();
int dimension = Math.min(parent.getWidth(), parent.getHeight())/2;
mThisImageView.setLayoutParams(new AbsListView.LayoutParams(dimension, dimension));
ResizeCounter.setCounter(ResizeCounter.getCounter() + 1);
return true;
}
});
}
//Activity listens to the moment when all ImageViews have been resized
ResizeCounter.addCounterListener(new OnResizeCounterChangeListener() {
@Override
public void onResizeCounterChanged() {
if (ResizeCounter.getCounter() == 4) {
mAnswerGridView.setVisibility(View.VISIBLE);
}
}
});
我也试着调整它们的大小在onGlobalLayout方法(相同的结果)并重写onMeasure方法(父视图在t时仍然为空他的观点)。
我怀疑在onPreDraw()中更改视图为时已晚,但是有没有一种方法可以在之前调用,我可以确定所有视图都已经过测量?
我试过requestLayout和invalidate方法,但没有任何效果。 – tomwyr
耶,使用给定的方法做了这项工作,虽然我不明白为什么。不应该requestLayout()调用这两个方法(度量和布局)以及? – tomwyr
是的,它应该,但它不立即调用该方法 – John