Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

fragments, android:zAdjustment (z order) and animations

Tags:

I'm using the support library. Now, I want to have a fragment shifting in from the bottom, moving OVER the previous one.

For this I use this to keep the previous fragment (the one that is being slided over) visible until the new fragment is in its place:

<alpha xmlns:android="http://schemas.android.com/apk/res/android"    android:fromAlpha="1.0" android:toAlpha="1.0"     android:duration="2500"    android:zAdjustment="bottom" /> 

this is animation used for the new fragment to slide in from bottom:

<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="100%p" android:toYDelta="0"         android:duration="@android:integer/config_mediumAnimTime"          android:zAdjustment="top"/> 

I've put the z adjustment to bottom and top for both, but still the 'bottom' animation is still on top of the new fragment! I have put the duration to 2500 for testing and it stays on top for the whole time.

Does zAdjustment not work for fragment animations?

like image 396
Boy Avatar asked Aug 28 '12 08:08

Boy


People also ask

How do you animate a fragment?

To animate the transition between fragments, or to animate the process of showing or hiding a fragment you use the Fragment Manager to create a Fragment Transaction . Within each Fragment Transaction you can specify in and out animations that will be used for show and hide respectively (or both when replace is used).

What is Fragment transition?

The Fragment API provides two ways to use motion effects and transformations to visually connect fragments during navigation. One of these is the Animation Framework, which uses both Animation and Animator . The other is the Transition Framework, which includes shared element transitions.

What is the use of FragmentManager in Android?

The FragmentManager manages the fragment back stack. At runtime, the FragmentManager can perform back stack operations like adding or removing fragments in response to user interactions. Each set of changes are committed together as a single unit called a FragmentTransaction .

How do I switch fragments?

Use replace() to replace an existing fragment in a container with an instance of a new fragment class that you provide. Calling replace() is equivalent to calling remove() with a fragment in a container and adding a new fragment to that same container. transaction. commit();


2 Answers

According to this google group thread Z adjustment only works for window animations.

"The Z adjustment only works for window animations. I thought this was documented, but apparently not." -- Dianne Hackborn (Android framework engineer)

like image 183
Marius Avatar answered Oct 21 '22 09:10

Marius


You can override the onCreateAnimation method and for any animations you can check what animation is currently running and if you need it to be on top, set the Z-axis from there.

override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {     if (nextAnim == R.anim.enter_from_right || nextAnim == R.anim.exit_to_right) {         ViewCompat.setTranslationZ(view, 1f)     } else {         ViewCompat.setTranslationZ(view, 0f)     }      return super.onCreateAnimation(transit, enter, nextAnim) } 

Recommend implementing this as a base Fragment class for all your fragments.

like image 29
barnabus Avatar answered Oct 21 '22 09:10

barnabus