3

たくさんの子を含み、ViewFlipper に膨らませるカスタム レイアウトがある状況があります。

私の問題は、レイアウトがまだすべての子ビューをロードしているにもかかわらず、ViewFlipper がレイアウトをアニメーション化しようとすると、アニメーションがひどく途切れることです。

onLayout を使用してみましたが、親レイアウトの膨張が完了した瞬間に呼び出されます (子ビューが膨張するのを待たないため、スタッターは持続します)

私もonMeasureを試しましたが、それは何十回も呼び出され、レイアウト内の何かが変更されるたびに呼び出され続けます(EditTextがフォーカスを取得したり、値を変更したりするなど)。

だから、私は困惑しています...レイアウトが完全に膨らんだときに、何かが起こるので、フリッパーにアニメーションを実行するように指示できますか?

4

2 に答える 2

8

カスタム レイアウトでonFinishInflate()をオーバーライドできます。これは、すべての子ビューが追加された後、インフレーションの最終フェーズと呼ばれます。

于 2013-08-17T02:54:32.233 に答える
3

を使用できますOnPreDrawListener。これは、ビューが最初のフレームを描画する直前に呼び出され、その時点ですべての子がレイアウトされます。

CustomView myCustomView = (CustomView) findViewById(R.id.my_custom_view);
final ViewTreeObserver obs = myCustomView.getViewTreeObserver();
obs.addOnPreDrawListener(new OnPreDrawListener () {
    @Override
    public boolean onPreDraw () {
        //We only care the first time it happens, so remove it
        obs.removeOnPreDrawListener(this);

        //Post your animation here, then return true
        return true;
    }
});
于 2013-08-17T02:47:06.010 に答える