2015-07-14 21 views
9

ho un elemento di transizione condivisa tra due attività che funziona nel seguente modo:Android: accelerare la transizione elemento condiviso tra le attività

Intent someintent = new Intent(this, someclass.class); 

     if (Build.VERSION.SDK_INT >= 21) { 

      ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this 
        , new Pair<>(viewClicked.findViewById(R.id.someimage), "someimage") 
        , new Pair<>(viewClicked.findViewById(R.id.someicon), "someicon") 
      ); 
      startActivity(someintent, options.toBundle()); 
     } 
     else { 
      startActivity(someintent); 
     } 

questo funziona bene, ma il passaggio è estrema lentezza. Quando l'immagine viene cliccata per la prima volta, sembra bloccarsi per un secondo o due prima che la transizione abbia luogo. Ciò è dovuto al "peso" dell'attività caricata o il ritardo è configurabile?

+0

A quale visualizzazione stai passando? Ho visto ritardi quando sto usando un'immagine che deve essere afferrata dal web - e in questo caso, ritarda la transizione di inserimento (parte dell'API) finché l'immagine non è stata completamente scaricata/visualizzata. – Booger

+0

@Booger Sto passando da un'attività che contiene una panoramica delle immagini a un'altra attività contenente un frammento che contiene la stessa immagine al suo interno. La vista stessa è un normale ImageView. – Jon

+0

http://www.androiddesignpatterns.com/2015/03/activity-postponed-shared-element-transitions-part3b.html. – Sakiboy

risposta

11

Hai provato la durata cambio di enterTransition e returntransition:

private Transition enterTransition() { 
     ChangeBounds bounds = new ChangeBounds(); 
     bounds.setDuration(2000); 

     return bounds; 
    } 

    private Transition returnTransition() { 
     ChangeBounds bounds = new ChangeBounds(); 
     bounds.setInterpolator(new DecelerateInterpolator()); 
     bounds.setDuration(2000); 

     return bounds; 
    } 

E in onCreate:

getWindow().setSharedElementEnterTransition(enterTransition()); 
getWindow().setSharedElementReturnTransition(returnTransition()); 
+0

grazie - Ho provato a utilizzare questo sia in fromActivity che in toActivity nella transizione e non influenza la velocità. Quindi, se questo è l'unico modo per cambiare i tempi di transizione, suppongo che il peso del frammento stia causando il ritardo. Molte grazie per il tuo aiuto – Jon

+0

Fulmine veloce ora - grazie! – danwilkie

4

Un altro modo che può aiutare alcuni che hanno già la configurazione transizioni nei loro stili:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    getWindow().getSharedElementEnterTransition().setDuration(2000); 
    getWindow().getSharedElementReturnTransition().setDuration(2000) 
     .setInterpolator(new DecelerateInterpolator()); 
} 
Problemi correlati