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、在使用动画之前别忘了在主题里面增加如下代码:

<!-- 允许使用transitions -->
<item name="android:windowContentTransitions">true</item>
<!--是否覆盖执行,其实可以理解成是否同步执行还是顺序执行-->
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>

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完全透明,可以在主题里面做如下设置:

<style name="BaseAppTheme.Trans">

       <item name="android:windowBackground">@android:color/transparent</item>

<item name="android:windowIsTranslucent">true</item>

</style>

总结:

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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值