2016-07-07 1 views
6

Ho una lista di dati di alimentazione nell'applicazione globale. Ho usato questo codice per fare una transizione dal mio RecyclerView in MainAcitivtyTransizione elemento condiviso personalizzato nell'attività finale

// selected item event 
Intent intent = new Intent(this, DetailActivity.class); 
intent.putExtra("item_feed_index", selectedItemIndex); 
FeedViewHolder viewHolder = getViewHolderFromPosition(position); 
Pair<View, String> pair1 = Pair.create(viewHolder.imageView, "TransitionName.Feed.Image"); 
Pair<View, String> pair2 = Pair.create(viewHolder.textView, "TransitionName.Feed.Text"); 
Pair<View, String> pair3 = Pair.create(viewHolder.button, "TransitionName.Feed.Button"); 
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1, pair2, pair3); 
startActivity(intent, options.toBundle()); 

funziona. Ma il problema è che in DetailActivity, ho un altro elenco verticale, che l'utente può scorrere in su/su per cambiare la voce Feed in lista (che cambia anche l'indice di scorrimento).

Quando si preme indietro da DetailActivity, voglio eseguire la transizione dell'animazione di uscita sull'indice di feed di visualizzazione corretto. Come lo posso fare?

Questo è il codice onActivityResult in MainActivity, scorre il riciclo nella posizione corretta, ma l'animazione di transizione di uscita non è la posizione corretta.

int currentFeedIndex = Application.getInstance().getCurrentViewingFeed(); 
if (currentFeedIndex > 0 && currentFeedIndex < adapter.getItemCount()) { 
    if (gridLayoutManager != null) { 
     gridLayoutManager.scrollToPositionWithOffset(currentFeedIndex + 1, 0); 
    } 
} 

sto cercando il modo per cambiare la lista coppia prima di eseguire l'animazione uscita

Aggiornamento: qui è il layout di DetailActivity, dove ho assegnare nomi di transizione alle viste

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/imgFeed" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:transitionName="TransitionName.Feed.Image" /> 

    <TextView 
     android:id="@+id/tvLogo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:transitionName="TransitionName.Feed.Text"/> 

    <Button 
     android:transitionName="TransitionName.Feed.Button" 
     android:id="@+id/btn" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="40dp" 
     android:layout_below="@+id/tvLogo"/> 
    </RelativeLayout> 
+1

Potrebbe pubblicare il codice come hai assegnato transizione nomi alle viste di 'DetailActivity'? – rom4ek

+0

@ rom4ek Ho aggiornato il codice – R4j

risposta

2

sull'attività chiamante:

String itemId; //set your item id here 

Intent intent = new Intent(this, DetailActivity.class); 
intent.putExtra("item_feed_index", selectedItemIndex); 
intent.putExtra("item_id", itemId); 

String imageViewTransitionName = "TransitionName.Feed.Image." + itemId; 
String textViewTransitionName = "TransitionName.Feed.Text." + itemId; 
String buttonTransitionName = "TransitionName.Feed.Button." + itemId; 

ViewCompat.setTransitionName(viewHolder.imageView, imageViewTransitionName); 
ViewCompat.setTransitionName(viewHolder.textView, textViewTransitionName); 
ViewCompat.setTransitionName(viewHolder.button, buttonTransitionName); 

Pair<View, String> pair1 = Pair.create(viewHolder.imageView, imageViewTransitionName); 
Pair<View, String> pair2 = Pair.create(viewHolder.textView, textViewTransitionName); 
Pair<View, String> pair3 = Pair.create(viewHolder.button, buttonTransitionName); 

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1, pair2, pair3); 
startActivity(intent, options.toBundle()); 

Quindi nella tua destinazione Activity devi solo ottenere itemId da Intent e impostare il nome di transizione corretto per ciascuna vista.

String itemId = getIntent().getString("item_id"); 
String imageViewTransitionName = "TransitionName.Feed.Image." + itemId; 
String textViewTransitionName = "TransitionName.Feed.Text." + itemId; 
String buttonTransitionName = "TransitionName.Feed.Button." + itemId; 

ViewCompat.setTransitionName(findViewById(R.id.imageView), imageViewTransitionName); 
ViewCompat.setTransitionName(findViewById(R.id.textView), textViewTransitionName); 
ViewCompat.setTransitionName(findViewById(R.id.button), buttonTransitionName); 
+0

Non si ottiene il punto.Immettere l'animazione da 'MainActivity' a' DetailActivity' è corretto con questi nomi di transizione. Ma in 'DetailActivity', c'è un viewpager per passare a un altro oggetto (che modifica itemId). Quello che voglio è aggiornare il nuovo itemId per l'animazione di uscita quando si preme indietro da 'DetailActivity' a' MainActivity' – R4j

+1

@ R4j forse potresti pubblicare un piccolo video che spiega il tuo problema, così possiamo portarti finalmente :) – rom4ek

1

override del metodo onBackPressed sul DetailActivity come questo:

@Override 
public void onBackPressed() { 
    supportFinishAfterTransition(); 
    super.onBackPressed(); 
} 

Inoltre, assicurarsi di aver specificato la transizione uscita sulla styles.xml

Problemi correlati