Ich habe die folgende Situation innerhalb einer Fußballanwendung.
Wir wollen die gemeinsamen Elemente zwischen all diesen Aktivitäten implementieren.Mehrere freigegebene Elemente
In meinem viewholder am ersten Activity
für das Spiel ich ein android:transitionName
gesetzt haben, die auf dem zweiten Activity
auf den gleichen transitionName entspricht.
<!-- item_viewholder (first activity) -->
<CustomViewContainingImageViewAndTextView
android:id="@+id/item_match_hometeam"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:transitionName="@string/transition_morph_match_header_homeTeam" />
<!-- header (second activity) -->
<CustomViewContainingImageViewAndTextView
android:id="@+id/item_match_hometeam_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:transitionName="@string/transition_morph_match_header_homeTeam" />
Ich starte die zweiten Activity
mit
final String awayTeamTransition = activityContext.getString(R.string.transition_morph_match_header_awayTeam);
final String homeTeamTransition = activityContext.getString(R.string.transition_morph_match_header_homeTeam);
final ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
activityContext,
Pair.create(homeTeam, homeTeamTransition),
Pair.create(awayTeam, awayTeamTransition));
activityContext.startActivity(intent, options.toBundle());
Jetzt dieser Übergang funktioniert gut, aber was ist, wenn ich ein noch tieferes Detail haben will.
Statistiken über das ausgewählte Team anzeigen und ich möchte auch dort den Übergang teilen?
Ich versuchte, die transitionName
programmatisch einstellen, wenn die CustomViewContainingImageViewAndTextView
auf die neue transitionName
geklickt wurde.
final String teamViewTransition = activityContext.getString(R.string.transition_morph_teamview_to_detail);
//teamView is the view that was clicked.
ViewCompat.setTransitionName(teamView, teamViewTransition);
final ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
activityContext,
Pair.create(teamView, teamViewTransition));
activityContext.startActivity(teamInfoActivityIntent, options.toBundle());
diese transitionName entspricht dem ImageView
am dritten Activity
<ImageView
android:id="@+id/team_info_header_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:transitionName="@string/transition_morph_teamview_to_detail" />
jedoch die enterTransition versagt, aber die exitTransition funktioniert!
Dies bricht jedoch den exitTransition von 2 -> 1
Sight. Hoffe jemand braucht etwas Zeit, um dies herauszufinden.
Vielen Dank im Voraus
Hey Mann! Ich mag Ihre Lösung, aber meine ImageView in meiner dritten Aktivität ist in einem Fragment und in einer Recyclerview. Ich müsste also meinen Transitionsnamen meiner Aktivität geben, sie an mein Fragment übergeben, an meinen Adapter übergeben und an meinen Viewholder übergeben. Was für ein Ärger ... – tim
Ja, oder Sie können es in 'SharedPreferences' oder in der Datenbank speichern und dann in Ihrem' ViewHolder'/'Adapter' extrahieren. Oder Sie können es irgendwo als "statische" Variable setzen. Oder Sie können es sogar als ein Feld in Ihrem Modell (d. H. "Team" -Klasse, es wäre der einfachste Weg) und dann wieder in "onBindViewHolder" extrahieren. Wie auch immer, Sie müssen es in Runtime setzen, weil Sie nicht wissen, was geteilt wird, bis es geklickt wird :) – rom4ek