在我的佈局中,我有一個包含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