Search code examples
androidanimationz-order

How to bring Animation to front: bringToFront and zAdjustment/Z-ordering


I have a LinearLayout with two views in it, next to each other. When a view is tapped upon, it animates to full screen. This goes fine for the view on the right, but it fails for the left view:

I am unable to animate the left view on top of the right view

Without corrupting my layout with bringToFront(). Adjusting the Z-order of my animation does not seem to work.

Not a solution: The problem is gone when I use "brintToFront()" on the left view, but this causes my layout to be completely corrupted afterwards, and there is no brintToBack() function or whatsoever. => brintToFront = not a good solution?

Adjusting the Z-order of my animation does not seem to work (does not change anything).

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);

Why does Z-ordering not work as expected?


Solution

  • This should be possible if you extend LinearLayout and override the following method:

    getChildDrawingOrder (int childCount, int i)
    

    To make sure layout uses your function you need to call setChildrenDrawingOrderEnabled(true)

    See ViewGroup javadoc