2

2つのビューが隣り合ったLinearLayoutがあります。ビューをタップすると、フルスクリーンにアニメーション化されます。これは、右側のビューでは問題ありませんが、左側のビューでは失敗します。

右側のビューの上に左側のビューをアニメーション化できません

bringToFront()でレイアウトを壊すことなく。アニメーションのZオーダーを調整しても機能しないようです。

解決策ではありません。左側のビューで「brintToFront()」を使用すると問題は解決しますが、これにより、後でレイアウトが完全に破損し、brintToBack()関数などがなくなります。=> brintToFront =良い解決策ではありませんか?

アニメーションのZオーダーを調整しても機能しないようです(何も変更されません)。

scaleAnimation.setZAdjustment(Animation.ZORDER_TOP);
translateAnimation.setZAdjustment(Animation.ZORDER_TOP);
AnimationSet set = new AnimationSet(true);
set.addAnimation(scaleAnimation);
set.addAnimation(translateAnimation);
set.setZAdjustment(AnimationSet.ZORDER_TOP);
myFrameLayout.startAnimation(set);

Zオーダーが期待どおりに機能しないのはなぜですか?

4

3 に答える 3

6

これは、LinearLayoutを拡張し、次のメソッドをオーバーライドする場合に可能になるはずです。

getChildDrawingOrder (int childCount, int i)

レイアウトが関数を使用していることを確認するには、setChildrenDrawingOrderEnabled(true)を呼び出す必要があります

ViewGroupjavadocを参照してください

于 2013-05-25T00:55:19.017 に答える
3

zの並べ替えが適用される場合は、ビューで新しいレイアウトをリクエストする必要がありますが、アニメーションを開始する前にリクエストしてみてください。

AnimationSet set = new AnimationSet(true);
// init animation ...
scaledView.bringToFront();
scaledView.requestLayout();
myFrameLayout.startAnimation(set);
于 2013-03-27T15:44:33.327 に答える
1

これには良い答えはないと思います。

現在、画面上の他のすべてもアニメーション化しています。したがって、ビュー1がビュー2の上で成長しているように見えるように、ビュー1がビュー2の上でも大きくなる必要がある場合は、ビュー2もアニメーション化します。実際には、ビュー2は小さくなり、ビュー1は大きくなります。

かなり多くの作業と悪い解決策がありますが、私は唯一の解決策だと思います。

于 2012-10-05T14:55:42.117 に答える