私のレイアウトでは、4つのカスタムImageViewを含むGridViewがあります。すべてのImageViewが最初にサイズ変更されるまで、GridViewの可視性を不可視に設定していますが、GridViewが表示されても、ImageViewsの短い点滅がまだ変わりません。描画前のビューのサイズ変更
各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を試して、メソッドを無効にしましたが効果はありません。 – tomwyr
私は理由をよく理解していませんが、特定の方法を使って仕事をしました。 requestLayout()はこれらの2つのメソッド(メジャーとレイアウト)を呼び出すべきではありませんか? – tomwyr
はい、それはすべきですが、それはすぐにそのメソッドを呼び出すことはありません – John