package com.cui.trypro.activity_animation; import android.animation.Animator; import android.animation.ValueAnimator; import android.os.Bundle; import android.view.View; import android.view.Window; import android.view.animation.Animation; import com.cui.trypro.BaseActivity; import com.cui.trypro.R; import com.cui.trypro.activity_animation.activityOptionCS.anim.ViewAnimationListenerAdapter; import com.cui.trypro.activity_animation.activityOptionCS.transition.TransitionCompat; import com.cui.trypro.activity_animation.activityOptionCS.transition.TransitionListenerAdapter; import butterknife.ButterKnife; /** * Created by cuiyang on 15/8/12. * <p/> * http://blog.csdn.net/wangjia55/article/details/42583011 */ public class MyOptionICS extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { // 允许使用transitions 5.0才需要 MyOptionICs会有问题 // getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); super.onCreate(savedInstanceState); setContentView(R.layout.option_ics_act); ButterKnife.inject(this); super.initToolbar("", true); /** * view动画的监听器,比如thumbNailScaleAnim,screenTransitAnim这样的动画就会在这里得到监听 * * 这里的值是说明动画进行到什么时候,原始的view开始显示 * 设置方式是:动画时间越长,可以设置的越精细,越靠近1,动画时间越短设置为0.95就差不多了 * 这里的值请自行根据你的动画长度进行调整,如果调整不好可能会出现动画结束后相应元素不见的问题。 * 这里测试是如果动画是2000ms,那么用0.998较为合适 */ final float fraction = 0.9f; TransitionCompat.addViewAnimListener(new ViewAnimationListenerAdapter() { boolean isShowed = false; @Override public void onViewAnimationStart(View view, Animator animator) { // TODO 自动生成的方法存根 super.onViewAnimationStart(view, animator); } public void onViewAnimationUpdate(View view, ValueAnimator valueAnimator, float progress) { super.onViewAnimationUpdate(view, valueAnimator, progress); // 判断当前是否是进入的状态,如果是进入的那么isEnter= true if (!TransitionCompat.isEnter && progress >= fraction && !isShowed) { isShowed = true; } } @Override public void onViewAnimationEnd(View view, Animator animator) { // TODO 自动生成的方法存根 super.onViewAnimationEnd(view, animator); if (!TransitionCompat.isEnter && !isShowed) { isShowed = true; } } }); /** * 屏幕(场景)动画的监听器,这里用了适配器模式。可以传入完整的接口实现类 */ TransitionCompat.addListener(new TransitionListenerAdapter() { @Override public void onTransitionEnd(Animator animator, Animation animation, boolean isEnter) { super.onTransitionEnd(animator, animation, isEnter); // TODO:onEnd } }); /**进入的动画配置*/ // TransitionCompat.setEnterTransition(new SceneFade(MyOptionICS.this));// use to scale Up animation // TransitionCompat.setAnimDuration(1000);// default // TransitionCompat.setAnimStartDelay(0);// default // TransitionCompat.setTimeInterpolator(new AccelerateDecelerateInterpolator());// default TransitionCompat.setAnimDuration(500); // 这段代码必须放在ActivityOptionsCompat各种设置之后 TransitionCompat.startTransition(this, R.layout.option_ics_act); } /** * 返回的动画配置 */ @Override public void onBackPressed() { // super.onBackPressed();//不能用super要不失效 //TransitionCompat.setExitTransition(new MySceneAnim(this));//a test anim.Should not be use with customAnimation //TransitionCompat.setAnimStartDelay(0);// default TransitionCompat.setAnimDuration(500);// default //TransitionCompat.setTimeInterpolator(new AccelerateDecelerateInterpolator());// default //TransitionCompat.finishAfterTransition(activity, enterAnim, exitAnim);// custom animation // 这段代码必须放在ActivityOptionsCompat各种设置之后 TransitionCompat.finishAfterTransition(this); } }