I have list of feed data in global application.
I used this code to make a transition from my RecyclerView
in MainAcitivty
// 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());
It does work. But the problem is that in DetailActivity
, I have another vertical list, which user can scroll down/up to change the Feed item in list (which change the scroll index as well).
When press back from DetailActivity
, I want the exit animation transition execute on correct viewing feed index. How can I do that?
This is the code onActivityResult
in MainActivity
, it scroll the recycle to correct position, but the exit transition animation isn't correct position.
int currentFeedIndex = Application.getInstance().getCurrentViewingFeed();
if (currentFeedIndex > 0 && currentFeedIndex < adapter.getItemCount()) {
if (gridLayoutManager != null) {
gridLayoutManager.scrollToPositionWithOffset(currentFeedIndex + 1, 0);
}
}
I'm looking for the way to change the pair list before running exit animation
Update: here is the layout of DetailActivity, where I assign transition names to views
<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>
Android also supports these shared elements transitions: changeBounds - Animates the changes in layout bounds of target views. changeClipBounds - Animates the changes in clip bounds of target views. changeTransform - Animates the changes in scale and rotation of target views.
Slide animation can be applied to activity transitions by calling overridePendingTransition and passing animation resources for enter and exit activities. Slide animations can be slid right, slide left, slide up and slide down. overridePendingTransition(R. anim.
Android's transition framework allows you to animate all kinds of motion in your UI by simply providing the starting layout and the ending layout.
On caller activity:
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());
Then in your destination Activity
you just need to get itemId
from Intent
and set correct transition name for each view.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With