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)

请参阅视图组javadoc

于 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 之上变得比我也为视图 2 设置动画更大,那么看起来视图 1 在视图 2 之上增长,而实际上视图 2 越来越小,而视图 1 越来越大。

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

于 2012-10-05T14:55:42.117 回答