
 Originariamente inviato da 
lsantaniello
					 
				 
				Salve a tutti,
ho un'activity con un button ed un fragment. Quando clicco su un button viene cambiato il contenuto del fragment, randomico... l'esempio mi serve per capire il funzionamento.
Funziona tutto ma non vedo alcuna animazione, consigli?
	codice:
	FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
TestFragment llf = new TestFragment();
ft.replace(R.id.testFragment, llf);
ft.commit();
llf.test(i);
 Grazie
 
	 
 Ciao,
io ho applicato delle animazioni (stile Google Now) al layout dei Fragment, in questo modo:
1) Ho creato una classe denominata 'NowLayout' (si occupa ti animare tutti i layout child contenuti in un layout 'NowLayout'):
	codice:
	import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
public class NowLayout extends LinearLayout implements OnGlobalLayoutListener {
	public NowLayout(Context context, AttributeSet attrs) {
		super(context, attrs);
		initLayoutObserver();
	}
	public NowLayout(Context context) {
		super(context);
		initLayoutObserver();
	}
	private void initLayoutObserver() {
		setOrientation(LinearLayout.VERTICAL);
		getViewTreeObserver().addOnGlobalLayoutListener(this);
	}
	@Override
	public void onGlobalLayout() {
		getViewTreeObserver().removeGlobalOnLayoutListener(this);
		final int heightPx = getContext().getResources().getDisplayMetrics().heightPixels;
		boolean inversed = false;
		final int childCount = getChildCount();
		for (int i = 0; i < childCount; i++) {
			View child = getChildAt(i);
			int[] location = new int[2];
			child.getLocationOnScreen(location);
			if (location[1] > heightPx) {
				break;
			}
			if (!inversed) {
				child.startAnimation(AnimationUtils.loadAnimation(getContext(),
						R.anim.slide_up_left));
			} else {
				child.startAnimation(AnimationUtils.loadAnimation(getContext(),
						R.anim.slide_up_right));
			}
			inversed = !inversed;
		}
	}
}
 Questi i file dell'animazione indicati nella classe NowLayout:
R.anim.slide_up_left:
	codice:
	<?xml version="1.0" encoding="utf-8"?>
 
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >
    <translate
        android:duration="@integer/tempo2"
        android:fromYDelta="20%p"
        android:toYDelta="0" />
    
        <alpha
        android:duration="@integer/tempo2"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    <rotate
        android:duration="@integer/tempo2"
        android:fromDegrees="0"
        android:pivotX="0"
        android:pivotY="0"
        android:toDegrees="0" />
</set>
 e R.anim.slide_up_right:
	codice:
	<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >
    <translate
        android:duration="@integer/tempo2"
        android:fromYDelta="20%p"
        android:toYDelta="0" />
    
        <alpha
        android:duration="@integer/tempo2"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    <rotate
        android:duration="@integer/tempo2"
        android:fromDegrees="0"
        android:pivotX="0"
        android:pivotY="0"
        android:toDegrees="0" />
</set>
 a questo punto è sufficiente configurare i tuoi layout (.xml) specificando un layout contenitore di tipo 'NowLayout', in questo modo:
	codice:
	 <com.nome.tua.app.NowLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical" >
<layout1>
<layout2>
<layout3>
...
</com.nome.tua.app.NowLayout>
 Non appena viene eseguita la setContentView nelle tue Activity, partirà l'animazione su tutti i layout figli contenuti all'interno del layout com.nome.tua.app.NowLayout (di tutti i suoi layout) 'in automatico'.
p.s. l'animazione nei file xml l'ho configurata in modo che tutti i layout child si visualizzano in fade partendo dal basso verso l'alto.