package com.tevinjeffrey.rutgersct.ui.utils; import android.annotation.TargetApi; import android.app.SharedElementCallback; import android.os.Build; import android.transition.Transition; import android.view.View; import com.tevinjeffrey.rutgersct.R; import com.tevinjeffrey.rutgersct.ui.utils.CircleView; import java.lang.ref.WeakReference; import java.util.List; import java.util.Map; import butterknife.ButterKnife; @TargetApi(Build.VERSION_CODES.LOLLIPOP) public class CircleSharedElementCallback extends SharedElementCallback { private CircleView mCircleViewSnapshot; private boolean isEnter = true; private WeakReference<View> tempView; private final SharedElementsEnterTransitionCallback mCallback = new SharedElementsEnterTransitionCallback(); @Override //capture public void onSharedElementStart(List<String> sharedElementNames, List<View> sharedElements, List<View> sharedElementSnapshots) { super.onSharedElementStart(sharedElementNames, sharedElements, sharedElementSnapshots); //get desired view by tranisition name...guarenteed to be unique ;) if (isEnter) { for (View v : sharedElements) { if (v.getTransitionName().equals(v.getResources().getString(R.string.transition_name_circle_view)) && v instanceof CircleView) { mCircleViewSnapshot = (CircleView) v; mCircleViewSnapshot.setVisibility(View.INVISIBLE); } } } } @Override //set public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) { //It's possible the the framework was unable to map the view in the appering activity/fragment. //It's possible for the fragmment to not be attach to the activity. Calls to getResources will crash. if (isEnter) { if (mCircleViewSnapshot != null) { final View mappedFrameLayout = sharedElements.get(mCircleViewSnapshot.getTransitionName()); CircleView hiddenCircleView = ButterKnife.findById(mappedFrameLayout, R.id.hidden_circle_view); hiddenCircleView.setVisibility(View.VISIBLE); hiddenCircleView.setBackgroundColor(mCircleViewSnapshot.getBackgroundColor()); hiddenCircleView.setTitleText(mCircleViewSnapshot.getTitleText()); tempView = new WeakReference<>(mappedFrameLayout); } } isEnter = false; } public SharedElementsEnterTransitionCallback getTransitionCallback() { return mCallback; } public class SharedElementsEnterTransitionCallback implements Transition.TransitionListener { @Override public void onTransitionStart(Transition transition) { } @Override public void onTransitionEnd(Transition transition) { if (transition != null) { tempView.get().setAlpha(0); transition.removeListener(this); } } @Override public void onTransitionCancel(Transition transition) { transition.removeListener(this); } @Override public void onTransitionPause(Transition transition) { } @Override public void onTransitionResume(Transition transition) { } } }