From d7df8e9c5dd9b6684364d7974eb4e41357cca37f Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Sun, 29 Nov 2015 20:31:06 -0500 Subject: [PATCH] Finally figured out transitions. The biggest issue was that it wasn't clear transition names had to be unique for the whole fragment. Now also chaining transitions for different effects. --- .../adapters/AlbumsAdapter.java | 14 +++++++++++--- .../adapters/ArtistsAdapter.java | 13 ++++++++++--- .../fragments/AlbumFragment.java | 4 ++++ .../fragments/AlbumsFragment.java | 7 ++++++- .../fragments/ArtistFragment.java | 4 ++++ app/src/main/res/layout/fragment_album.xml | 3 +-- app/src/main/res/layout/fragment_artist.xml | 1 - app/src/main/res/layout/listitem_album_card.xml | 1 - app/src/main/res/layout/listitem_artist.xml | 1 - 9 files changed, 36 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java index ac927e0..e3148b9 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java @@ -7,8 +7,11 @@ import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v7.graphics.Palette; import android.support.v7.widget.CardView; +import android.transition.ChangeBounds; import android.transition.ChangeImageTransform; +import android.transition.ChangeTransform; import android.transition.Slide; +import android.transition.TransitionSet; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -47,6 +50,9 @@ public class AlbumsAdapter extends RealmBasedRecyclerViewAdapter= Build.VERSION_CODES.LOLLIPOP) { + albumViewHolder.albumArt.setTransitionName(realmResults.get(i).getAlbumsku()); + } Picasso.with(albumViewHolder.itemView.getContext()).load(realmResults.get(i).getCover_small()).into(albumViewHolder.albumArt, new Callback() { @Override public void onSuccess() { @@ -80,13 +86,15 @@ public class AlbumsAdapter extends RealmBasedRecyclerViewAdapter= Build.VERSION_CODES.LOLLIPOP) { fragment.setEnterTransition(new Slide(Gravity.BOTTOM)); fragment.setExitTransition(new Slide(Gravity.BOTTOM)); - fragment.setSharedElementEnterTransition(new ChangeImageTransform()); - fragment.setSharedElementReturnTransition(new ChangeImageTransform()); + TransitionSet sharedTransition = new TransitionSet(); + sharedTransition.addTransition(new ChangeImageTransform()).addTransition(new ChangeBounds()).addTransition(new ChangeTransform()); + fragment.setSharedElementEnterTransition(sharedTransition); + fragment.setSharedElementReturnTransition(sharedTransition); } fragment.setArguments(args); fragmentManager.beginTransaction() .setCustomAnimations(R.anim.fragment_enter,R.anim.fragment_exit,R.anim.fragment_pop_enter,R.anim.fragment_pop_exit) - .addSharedElement(albumViewHolder.albumArt,"albumart") + .addSharedElement(albumViewHolder.albumArt,realmResults.get(i).getAlbumsku()) .replace(R.id.fragment_holder, fragment, "tracks") .addToBackStack("tracks") .commit(); diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/ArtistsAdapter.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/ArtistsAdapter.java index d5f705e..aeb973d 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/ArtistsAdapter.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/ArtistsAdapter.java @@ -4,8 +4,10 @@ import android.content.Context; import android.os.Build; import android.os.Bundle; import android.support.v4.app.FragmentManager; +import android.transition.ChangeBounds; import android.transition.ChangeTransform; import android.transition.Slide; +import android.transition.TransitionSet; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -41,6 +43,9 @@ public class ArtistsAdapter extends RealmBasedRecyclerViewAdapter= Build.VERSION_CODES.LOLLIPOP) { + artistViewHolder.artistName.setTransitionName(realmResults.get(i).getArtistname()); + } artistViewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -50,13 +55,15 @@ public class ArtistsAdapter extends RealmBasedRecyclerViewAdapter= Build.VERSION_CODES.LOLLIPOP) { fragment.setEnterTransition(new Slide(Gravity.BOTTOM)); fragment.setExitTransition(new Slide(Gravity.BOTTOM)); - fragment.setSharedElementEnterTransition(new ChangeTransform()); - fragment.setSharedElementReturnTransition(new ChangeTransform()); + TransitionSet sharedTransition = new TransitionSet(); + sharedTransition.addTransition(new ChangeBounds()).addTransition(new ChangeTransform()); + fragment.setSharedElementEnterTransition(sharedTransition); + fragment.setSharedElementReturnTransition(sharedTransition); } fragment.setArguments(args); fragmentManager.beginTransaction() .setCustomAnimations(R.anim.fragment_enter,R.anim.fragment_exit,R.anim.fragment_pop_enter,R.anim.fragment_pop_exit) - .addSharedElement(artistViewHolder.artistName, "artist_name") + .addSharedElement(artistViewHolder.artistName, realmResults.get(i).getArtistname()) .replace(R.id.fragment_holder, fragment, "artist") .addToBackStack("artist") .commit(); diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumFragment.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumFragment.java index 74e6f0d..eaf8a5d 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumFragment.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumFragment.java @@ -1,6 +1,7 @@ package com.magnatune.eyecreate.companionformagnatune.fragments; import android.graphics.drawable.BitmapDrawable; +import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; @@ -73,6 +74,9 @@ public class AlbumFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View v = inflater.inflate(R.layout.fragment_album, container, false); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + v.findViewById(R.id.album_cover).setTransitionName(getArguments().getString(ARG_ALBUM_ID)); + } ListView listView = (ListView) v.findViewById(R.id.album_tracks); Album currentAlbum = db.where(Album.class).equalTo("albumsku",getArguments().getString(ARG_ALBUM_ID)).findFirst(); ((TextView)v.findViewById(R.id.album_name)).setText(currentAlbum.getAlbumname()); diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java index 8ed4889..3a78c03 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java @@ -5,13 +5,19 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.content.LocalBroadcastManager; +import android.transition.ChangeBounds; +import android.transition.ChangeImageTransform; +import android.transition.ChangeTransform; +import android.transition.TransitionSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.Window; import com.magnatune.eyecreate.companionformagnatune.R; import com.magnatune.eyecreate.companionformagnatune.adapters.AlbumsAdapter; @@ -42,7 +48,6 @@ public class AlbumsFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { recyclerView = (RealmRecyclerView) inflater.inflate(R.layout.fragment_albums,container,false); - recyclerView.setOnRefreshListener(new RealmRecyclerView.OnRefreshListener() { @Override public void onRefresh() { diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistFragment.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistFragment.java index a723b8c..8bcb3d9 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistFragment.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/ArtistFragment.java @@ -1,5 +1,6 @@ package com.magnatune.eyecreate.companionformagnatune.fragments; +import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; @@ -44,6 +45,9 @@ public class ArtistFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_artist,container,false);; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + v.findViewById(R.id.artist_name).setTransitionName(getArguments().getString(ARG_ARTIST_NAME)); + } recyclerView = (RealmRecyclerView) v.findViewById(R.id.artist_albums); Artist artist = db.where(Artist.class).equalTo("artistname",getArguments().getString(ARG_ARTIST_NAME)).findFirst(); ((TextView) v.findViewById(R.id.artist_name)).setText(artist.getArtistname()); diff --git a/app/src/main/res/layout/fragment_album.xml b/app/src/main/res/layout/fragment_album.xml index 83a6a33..5b24f31 100644 --- a/app/src/main/res/layout/fragment_album.xml +++ b/app/src/main/res/layout/fragment_album.xml @@ -12,8 +12,7 @@ + android:layout_height="wrap_content"/> \ No newline at end of file -- GitLab