我有一个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不能按预期工作?
答案 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越来越大。
相当多的工作和糟糕的解决方案,但我想是唯一的解决方案。