package com.marshalchen.common.demoofui.materialAnimations;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.transition.Transition;
import android.view.View;
import android.view.ViewAnimationUtils;
import com.marshalchen.common.demoofui.R;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class DetailActivity3 extends ActionBarActivity {
private static final long ANIM_DURATION = 1000;
private View bgViewGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.material_animation_activity_details3);
setupLayout();
setupWindowAnimations();
}
private void setupLayout() {
bgViewGroup = findViewById(R.id.backgroundViewGroup);
}
private void setupWindowAnimations() {
setupEnterAnimations();
setupExitAnimations();
}
private void setupEnterAnimations() {
Transition enterTransition = getWindow().getSharedElementEnterTransition();
enterTransition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {}
@Override
public void onTransitionEnd(Transition transition) {
animateRevealShow(bgViewGroup);
}
@Override
public void onTransitionCancel(Transition transition) {}
@Override
public void onTransitionPause(Transition transition) {}
@Override
public void onTransitionResume(Transition transition) {}
});
}
private void setupExitAnimations() {
Transition sharedElementReturnTransition = getWindow().getSharedElementReturnTransition();
sharedElementReturnTransition.setStartDelay(ANIM_DURATION);
Transition returnTransition = getWindow().getReturnTransition();
returnTransition.setDuration(ANIM_DURATION);
returnTransition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
animateRevealHide(bgViewGroup);
}
@Override
public void onTransitionEnd(Transition transition) {}
@Override
public void onTransitionCancel(Transition transition) {}
@Override
public void onTransitionPause(Transition transition) {}
@Override
public void onTransitionResume(Transition transition) {}
});
}
private void animateRevealShow(View viewRoot) {
int cx = (viewRoot.getLeft() + viewRoot.getRight()) / 2;
int cy = (viewRoot.getTop() + viewRoot.getBottom()) / 2;
int finalRadius = Math.max(viewRoot.getWidth(), viewRoot.getHeight());
Animator anim = ViewAnimationUtils.createCircularReveal(viewRoot, cx, cy, 0, finalRadius);
viewRoot.setVisibility(View.VISIBLE);
anim.setDuration(ANIM_DURATION);
anim.start();
}
private void animateRevealHide(final View viewRoot) {
int cx = (viewRoot.getLeft() + viewRoot.getRight()) / 2;
int cy = (viewRoot.getTop() + viewRoot.getBottom()) / 2;
int initialRadius = viewRoot.getWidth();
Animator anim = ViewAnimationUtils.createCircularReveal(viewRoot, cx, cy, initialRadius, 0);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
viewRoot.setVisibility(View.INVISIBLE);
}
});
anim.setDuration(ANIM_DURATION);
anim.start();
}
}