如何将动画带到前面:bringToFront和zAdjustment / Z-ordering

时间:2012-05-03 07:56:01

标签: android animation z-order

我有一个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-ordering不能按预期工作?

3 个答案:

答案 0 :(得分:6)

如果您扩展LinearLayout并覆盖以下方法,则应该可以这样做:

getChildDrawingOrder (int childCount, int i)

要确保布局使用您的功能,您需要调用setChildrenDrawingOrderEnabled(true)

请参阅ViewGroup javadoc

答案 1 :(得分:3)

对于您的z重新排序将适用于您需要在视图上请求新布局,但在开始动画之前尝试执行此操作:

AnimationSet set = new AnimationSet(true);
// init animation ...
scaledView.bringToFront();
scaledView.requestLayout();
myFrameLayout.startAnimation(set);

答案 2 :(得分:1)

我想这没有好的答案。

我现在也在为屏幕上的其他内容制作动画,所以如果视图1必须在视图2的顶部变大,那么我也会为视图2设置动画,这样看起来视图1在视图的顶部增长2,实际上视图2越来越小而视图1越来越大。

相当多的工作和糟糕的解决方案,但我想是唯一的解决方案。