CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: complicazio con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 11 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 2 su 2
Discussione:

Animazione Fragment

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    May 2013
    Messaggi
    8

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Animazione Fragment

    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

  2.  
  3. #2
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da lsantaniello Visualizza il messaggio
    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.
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy