6

Sto cercando di implementare alcune delle nuove animazioni di attività di Material Design, ma le esercitazioni che ho letto mostrano solo esempi in cui la vista da animare appartiene all'attività.Come animare le transizioni di attività quando si utilizzano le viste elenchi/griglie/riciclatore?

Nella mia app, sto usando un RecyclerView, in modo che il ImageView non è parte dell'attività:

MainActivity    -> Where I call startActivity() 
↳ MainFragment 
    ↳ RecyclerView 
    ↳ RecyclerViewAdapter 
    ↳ ViewHolder 
    ↳ ImageView   -> The hero imageView I'd like to animate 

Da quello che ho letto, dovrei iniziare la nuova attività in questo modo:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, (View) mImageView, "hero_image"); 

Intent intent = new Intent(this, SecondActivity.class); 
startActivityForResult(intent, options.toBundle()); 

La domanda è: che mImageView non appartiene allo MainActivity. Come posso passarlo?

+0

"non appartiene a MainActivity" quindi non è visibile nella schermata Attività? Se è visibile, appartiene alla tua attività – pskink

+0

, intendevo che non era gonfiato direttamente nell'attività. È gonfiato nell'adattatore, quindi l'attività non contiene un riferimento a quella vista. – Guilherme

+0

Non adattatore, ma la vista su cui è impostato l'adattatore, non fa riferimento a quella vista immagine – pskink

risposta

1

Nell'esempio, si avvia l'attività allo stesso modo. La vista è parte della gerarchia di visualizzazione dell'attività, quindi la chiamata è ancora valida. Quando si verifica una transizione di uscita, la gerarchia di visualizzazione dell'attività viene ricercata per le viste esistenti da utilizzare nella transizione di uscita. Confronta gli oggetti con quelli che sono elementi condivisi in modo che non esca dagli elementi condivisi.

Quando si utilizza RecyclerView, è probabile che ci si debba preoccupare della transizione di reinserimento. RecyclerView può riciclare una o tutte le viste. Se non hai fornito i nomi univoci degli elementi condivisi (o potenziali elementi condivisi), dovrai implementare onMapSharedElements per assicurarti che venga utilizzata la Vista corretta. Consiglio sempre che quando si utilizzano elenchi di potenziali elementi condivisi si dia ad ogni elemento un nome di transizione univoco (dinamicamente). In questo modo il framework può determinare automaticamente quale vista utilizzare quando si torna indietro.

+0

Penso che io Comprendere che la vista è parte della gerarchia dell'attività, ma non so come ottenere un riferimento a quel particolare 'ImageView' di quell'elemento specifico di' RecyclerView'. – Guilherme

+0

Ci sono molti modi per farlo e dipende da come è scritta la tua app. Se è presente un'azione dell'utente (click listener) vicino all'elemento condiviso che attiva la chiamata startActivity, la vista cliccata può essere utilizzata con findViewById per trovare lo specifico ImageView. Potrebbe essere necessario risalire la gerarchia se il clic su View è un cugino. Se il clic non è correlato (ad esempio, il pulsante "Apri elemento selezionato") è necessario tenere traccia delle Viste in qualche modo. findViewWithTag() o findViewHolderForItemId() può essere utile. Fai attenzione a RecyclerView: qualsiasi elemento fuori dallo schermo non sarà condivisibile. –

Problemi correlati