2012-04-03 15 views
1
私はのLinearLayoutの拡大/縮小のアニメーションを表示するには、ここからのコードを使用しています

:それはうまく崩壊https://stackoverflow.com/a/5122460/458603アニメーション要素上で起動しない場合は、高さ= 0

Animation quickEntryAnimation = new HeightAnimation(mQuickEntryArea, DisplayHelper.dpToPixel(200, this), mQuickEntryArea.getHeight() < 10); 
quickEntryAnimation.setDuration(300); 
mQuickEntryArea.startAnimation(quickEntryAnimation); 
mQuickEntryArea.invalidate(); 

が、mQuickEntryAreaの高さがある時はいつでも0を、それを何かが全体のビューを再レイアウト(画面をタップするなど)させた後にのみ拡張されます。何が起こっていますか?

+0

あなたはそれを解決できましたか?私はexactyly同じ問題があります。ありがとう。 – Yar

+1

しかし、高さ0を言いまして、私はそれを1に変更しました。今はうまくいくようです。 – Yar

+0

ハハそれは私がその間にやったことです:P私はこのプロジェクトを見ていない:)あなたが解決策を見つけたら投稿してください! – manmal

答えて

3

は次のようにアニメーションを開始する前にrequestLayout()を呼び出してみてください。

Animation quickEntryAnimation = new HeightAnimation(mQuickEntryArea, DisplayHelper.dpToPixel(200, this), mQuickEntryArea.getHeight() < 10); 
quickEntryAnimation.setDuration(300); 
mQuickEntryArea.requestLayout(); 
mQuickEntryArea.startAnimation(quickEntryAnimation); 

少なくとも私にとって、それは問題を解決します。

更新:これは正常に動作しなかったという別の星座を確認しました。私はViewクラスのレンダリングコードを調べ、複数のレンダリング手順があることに気付きました。アニメーションをアクティブ化するのは、ビューの親によって実際にトリガーされます。あなたのために動作しない解決策上記の場合には、このような何かをやってみてください:

mQuickEntryArea.startAnimation(quickEntryAnimation); 
((ViewGroup) mQuickEntryArea.getParent()).invalidate(); 

は親がViewGroupである必要はないことに注意してください!

グリーティング、 デビット

関連する問題