10

Utilizzo la libreria di supporto di Peter Doyle per l'implementazione di un'attività che utilizza sia Fragments che Google Maps e sembra che non riesca a far funzionare le animazioni di FragmentTransaction. Ho provato a utilizzare il metodo setCustomAnimations(int enter, int exit) e il metodo setTransition(int transit) ma senza alcun risultato. Chiunque è riuscito a far funzionare le animazioni o ha avuto problemi a far funzionare le animazioni?Libreria di supporto: FragmentTransaction animazioni non funzionanti

Alcune delle animazioni che ho provato:

setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) 

setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) 

setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right) 
+1

Credevo di aver funzionato su Galaxy S2 ma non sugli altri. Tornerò per aggiornarti su questo quando sarò al lavoro domani mattina. – RobGThai

+1

Controlla questa domanda. La risposta accettata mi ha aiutato. http://stackoverflow.com/questions/7718111/android-fragment-standard-transition-not-animating – Sababado

risposta

1

avete provato FragmentTransaction.remove() e poi FragmentTransaction.add(), invece di FragmentTransaction.replace()? Ho visto in altri thread lamentarsi di replace() non funziona come previsto.

Non ho usato la biblioteca android-support-v4-googlemaps, ma posso confermare il codice qui sotto funziona con android-support-v4.jar:

FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); 
tx.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
tx.replace(R.id.fragment_container, new Fragment2()); 
tx.addToBackStack(null); 
tx.commit(); 
+0

Grazie per la risposta Andres. Sfortunatamente non sono riuscito a far funzionare le animazioni (eccetto per 'setTransition (FragmentTransaction.TRANSIT_FRAGMENT_OPEN)' e 'setTransition (FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)' ma ho riscontrato altri problemi con questo), quindi ho rimosso le chiamate al metodo di animazione/transizione. –

+0

L'uso di .add() è una soluzione migliore rispetto all'uso di.replace(). Un buon esempio è l'uso di .replace() nel supporto v27.0.0 con setCustomAnimations, l'app si blocca semplicemente quando il frammento viene rimosso dallo stack. Per me la soluzione è usare .add(), ma la transazione in animazione è persa come ha detto @AdilHussain – Pelanes

11

Si dovrebbe chiamare FragmentTransaction. setCustomAnimations prima e quindi chiamare FragmentTransaction. sostituire metodo come questo:

 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
     ft.setCustomAnimations(R.anim.fade_out,R.anim.fade_in); 
     ft.replace(R.id.fragmentDetails, detailsFrag); 
+1

OMG !! Non posso credere che sia così stupido! mi ci sono voluti ore! –

0

provare a fare una fotografia istantanea del vostro mappa di google:

private void snapShot() { 
    SnapshotReadyCallback callback = new SnapshotReadyCallback() { 
     Bitmap bitmap; 

     @Override 
     public void onSnapshotReady(Bitmap snapshot) { 
      // TODO Auto-generated method stub 
      bitmap = snapshot; 
      try { 
       FileOutputStream out = new FileOutputStream(getActivity() 
         .getFilesDir() + "/MapSnapshot.png"); 
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
     } 
    }; 

    map.snapshot(callback); 

} 

Il fare un nuovo frammento che hanno solo una foto della mappa. Caricare questo nuovo frammento con la sostituzione e quindi effettuare la transizione sul frammento che si desidera sostituire: finale SnapShotFragment snapFrag = new SnapShotFragment(); FragmentTransaction transaction = getFragmentManager() .beginTransaction();

     transaction.replace(MapFragment.this.getId(), 
           snapFrag); 
         transaction.addToBackStack(null); 
         transaction.commit(); 
         getFragmentManager().executePendingTransactions(); 
         final boolean roi = isInROI; 

         WayPointDetailActivity waypointFrag = new WayPointDetailActivity(); 
         waypointFrag.setWayPointId(wp.getId()); 
         waypointFrag.setInRoi(roi); 
         transaction = getFragmentManager() 
           .beginTransaction(); 

         transaction.setCustomAnimations(R.anim.enter, 
           R.anim.exit); 

         transaction.replace(snapFrag.getId(), waypointFrag); 
         transaction.addToBackStack(null); 
         transaction.commit();