2012-01-16 15 views
74

Voglio scambiare due frammenti in un'attività tramite l'animazione. La pagina di supporto A è per il lato A e il lato sinistro sullo schermo e la Pagina B per il frammento B sul lato destro dello schermo. Ora lo voglio quando faccio clic su un pulsante nella pagina A, quindi la Pagina A si sposterà sul lato destro dello schermo con alcune animazioni di transizione.frammento di scambio in un'attività tramite animazione

Ho provato il codice sottostante per sostituire la posizione

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.container, new FragB()); 
fragmentTransaction.commit(); 

Alla ricerca di qualche indizio.

Grazie in anticipo.

+1

possibile duplicato di [Anima la transizione tra i frammenti] (http://stackoverflow.com/questions/4932462/animate-the-transition-traversamento-fragments) – TalkLittle

risposta

247

Vecchio questiion e probabilmente già capito, ma per riferimento futuro:

ecco quello che si utilizza per impostare un'animazione personalizzata quando si sostituisce un frammento tramite il codice:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 

ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); 
ft.replace(R.id.fragment_container, newFragment, "fragment"); 
// Start the animated transition. 
ft.commit(); 

Ecco un esempio dell'animazione slide_in_left:

<?xml version="1.0" encoding="utf-8"?> 
<set> 
    <translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="-100%" 
    android:toXDelta="0" 
    android:interpolator="@android:anim/decelerate_interpolator" 
    android:duration="500"/> 
</set> 

si noti che questo è l'animazione se si utilizza la libreria di compatibilità. Invece, se si sta utilizzando e SDK con supporto nativo per l'FragmentManager allora l'animazione sarà simile a questa:

<?xml version="1.0" encoding="utf-8"?> 
<set> 
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
    android:propertyName="x" 
    android:valueType="floatType" 
    android:valueFrom="-1280" 
    android:valueTo="0" 
    android:duration="500"/> 
</set> 

Questo perché la libreria di compatibilità non supporta il nuovo tipo objectAnimator e invece implementare solo il vecchio quadro di animazione.

+79

Questa è sicuramente la risposta giusta. Nota che l'ordine conta! È necessario avere la chiamata setCustomAnimations() prima di aggiungere/sostituire le chiamate! – theelfismike

+2

Quindi quale approccio dovresti usare se vuoi la migliore comp? –

+17

Queste diverse animazioni non sono esattamente uguali. Stai assumendo che la larghezza del tuo frammento sia pari a 1280 utilizzando un valore di -1280. Se la larghezza era maggiore, non si avvia completamente fuori dallo schermo. – egfconnor

Problemi correlati