AndroidStudio 2.3 Beta 1
I am trying to make transitions work with fragments, as the image that I use does not go through. He just appears as usual.
I created a simple application to try to get it to work. I have 2 ListMovieFragment and DetailMovieFragment . And 1 MainActivity .
The user clicks the image in ListMovieFragment to go to DetailMovieFragment .
This is my xml change_image_transform transition:
<?xml version="1.0" encoding="utf-8"?> <transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> <changeImageTransform/> </transitionSet>
ListMovieFragment:
public class ListMovieFragment extends Fragment { public interface MovieSelectedListener { void onMovieSelected(int movieId); } private MovieSelectedListener mMovieSelectedListener; public ListMovieFragment() { } @Override public void onAttach(Context context) { super.onAttach(context); mMovieSelectedListener = (MovieSelectedListener)context; } @Override public void onDetach() { super.onDetach(); mMovieSelectedListener = null; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
DetailMovieFragment
public class DetailMovieFragment extends Fragment { public DetailMovieFragment() {
Mainactivity
public class MainActivity extends AppCompatActivity implements ListMovieFragment.MovieSelectedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState == null) { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.activity_main, new ListMovieFragment(), "listmoviefragment"); fragmentTransaction.commit(); } } @Override public void onMovieSelected(int movieId) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ListMovieFragment listMovieFragment = new ListMovieFragment(); DetailMovieFragment detailMovieFragment = new DetailMovieFragment(); Transition changeTransition = TransitionInflater .from(MainActivity.this) .inflateTransition(R.transition.change_image_transform); Transition explodeTransition = TransitionInflater .from(MainActivity.this) .inflateTransition(android.R.transition.explode); listMovieFragment.setSharedElementReturnTransition(changeTransition); listMovieFragment.setExitTransition(explodeTransition); detailMovieFragment.setSharedElementEnterTransition(changeTransition); detailMovieFragment.setEnterTransition(explodeTransition); final ImageView ivSharedImage = (ImageView)findViewById(R.id.ivMoviePoster); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.activity_main, new DetailMovieFragment(), "detailmoviefragment"); fragmentTransaction.addToBackStack("detailmoviefragment"); fragmentTransaction.addSharedElement(ivSharedImage, getResources().getString(R.string.transition_poster_image)); fragmentTransaction.commit(); } else { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.activity_main, new DetailMovieFragment(), "detailmoviefragment"); fragmentTransaction.addToBackStack("detailmoviefragment"); fragmentTransaction.commit(); } } @Override public void onBackPressed() { if(getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStackImmediate(); } else { super.onBackPressed(); } } }
Layout for ListMovieFragment
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="6dp"> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ivMoviePoster" android:layout_width="match_parent" android:layout_height="300dp" android:src="@drawable/placeholder_poster" android:scaleType="fitXY" android:adjustViewBounds="true" android:transitionName="@string/transition_poster_image"> </ImageView> </LinearLayout>
Layout for DetailMovieFragment:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="me.androidbox.fragmenttransitions.detail.DetailMovieFragment"> <ImageView android:id="@+id/ivMovieDetailPoster" android:layout_width="140dp" android:layout_height="160dp" android:layout_marginEnd="16dp" android:layout_marginTop="112dp" android:adjustViewBounds="true" android:scaleType="fitXY" android:layout_gravity="end" android:transitionName="@string/transition_poster_image"/> </FrameLayout>
String Name for Jump Name:
<string name="transition_poster_image">imagePoster</string>
The implementation seems simple, so I think my mistake is what I'm missing.
Thanks so much for any suggestions,