Private
Public Access
1
0

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.

This commit is contained in:
Kevin Whitaker
2015-11-29 20:31:06 -05:00
parent a633218eba
commit d7df8e9c5d
9 changed files with 36 additions and 12 deletions

View File

@@ -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<Album,AlbumView
public void onBindRealmViewHolder(final AlbumViewHolder albumViewHolder, final int i) {
albumViewHolder.artistName.setText(realmResults.get(i).getArtist().getArtistname());
albumViewHolder.albumName.setText(realmResults.get(i).getAlbumname());
if (Build.VERSION.SDK_INT >= 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<Album,AlbumView
if (Build.VERSION.SDK_INT >= 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();

View File

@@ -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<Artist,ArtistV
@Override
public void onBindRealmViewHolder(final ArtistViewHolder artistViewHolder, final int i) {
artistViewHolder.artistName.setText(realmResults.get(i).getArtistname());
if (Build.VERSION.SDK_INT >= 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<Artist,ArtistV
if (Build.VERSION.SDK_INT >= 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();

View File

@@ -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());

View File

@@ -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() {

View File

@@ -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());

View File

@@ -12,8 +12,7 @@
<ImageView
android:id="@+id/album_cover"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:transitionName="albumart" />
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/album_name"

View File

@@ -8,7 +8,6 @@
android:layout_margin="10dp"
android:textStyle="bold"
android:textSize="20sp"
android:transitionName="artist_name"
android:id="@+id/artist_name"/>
<TextView
android:layout_width="match_parent"

View File

@@ -13,7 +13,6 @@
android:layout_height="180dp"
android:layout_gravity="center"
android:scaleType="fitCenter"
android:transitionName="albumart"
android:id="@+id/album_art"/>
<LinearLayout
android:layout_width="match_parent"

View File

@@ -9,6 +9,5 @@
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:transitionName="artist_name"
android:id="@+id/artist_name"/>
</LinearLayout>