android Transition动画遇到的坑

因项目需求,对OOBE做动效。主要是activity之间的转场动画,每个activity界面布局分为 top 和 bottom两部分,界面切换时,top部分保持不变,bottom list部分实现左右切换。

最初的做法:ValueAnimator属性动画

切换时top不做切换,bottom list做transitionX的属性动画,界面切换时,bottom做完transitionX的动画(从右到左)之后再startActivity到下一个界面,下一个界面在onResume的时候也做transitionX的动画(从右到左),这样最终的效果是:界面切换的时候会有一段做动画的时间,在视觉上会造成界面在切换到的时候出现一段的空白间隙,而不是上下activity的bottom list一起切换,最终没有想要的效果。

后来的做法: android 5.0 出来的Transition过渡动画(使用过程中把我坑的够呛)

最简单的左右切换过渡动画:

1、在使用动画之前别忘了在主题里面增加如下代码:


name="android:windowContentTransitions">true

name="android:windowAllowEnterTransitionOverlap">true
name="android:windowAllowReturnTransitionOverlap">true

2、接下来:

Slide enterSlide = new Slide(Gravity.RIGHT);
enterSlide.setDuration(330);
// 除掉 top 不做动画
enterSlide.excludeTarget(R.id.layout_top_content, true);
enterSlide.setMode(Visibility.MODE_IN);
// bottom 做动画,结果我发现加上addTarget之后,左右切换的动画死活不生效,在别的demo中测试了下可以生效,目前还没找到原因
enterSlide.addTarget(R.id.layout_bottom_content);
enterSlide.setInterpolator(new PathInterpolator(0.25F, 0.1F, 0.25F, 1F));
getWindow().setEnterTransition(enterSlide);

不明白 addTarget为啥会影响整个动画。Transition做的就是给window做动画,有的时候需要activity完全透明,可以在主题里面做如下设置:

总结:

1、android transition实际上叫 content transition,表示应用之前,会遍历viewgroup中的所有子view,然后分别对view做transition。如果要设置当前viewgroup应用transition的时候作为一个整体进行,可以在layout里面设置这么一个属性 
android:transitionGroup="true" 
那么,在应用的时候就不会遍历寻找子view,而是对整个viewgroup应用transition。






你可能感兴趣的:(疑难杂症)