Android Content Transition界面切换

Android的Activity/Fragment切换有两种方式

不带共享元素:Content Transition

带共享元素的:Shared Element Transition

刚刚整理了一下Content Transition,记录一下自己的所得


要实现Content Transition分为下面几步

·在style.xml添加 

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

PS.我试了试,在最新的Android Studio3.0里不加也可以.


·页面切换

Bundle bundle= ActivityOptionsCompat.makeSceneTransitionAnimation(Activity activity).toBundle();
                Intent intent=new Intent(Context context,Class class);
                startActivity(intent,bundle);


·切换效果

可以通过XML和代码,两种方式实现。不过在此之前要先介绍一下一个重要概念

从活动A打开活动B

活动A退出 exitTransition

活动B进入 enterTransition


从活动B回到活动A

活动B退出 returnTransition

活动A进入 reenterTransition


I.XML

在style.xml里设置

<item name="android:windowExitTransition"></item> 
<item name="android:windowEnterTransition"></item>        
<item name="android:windowReturnTransition"></item>       
<item name="android:windowReenterTransition"></item>

例如:

<item name="android:windowExitTransition">@transition/exit</item>

res/transition/exit.xml

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <slide
        android:duration="2000"
        android:slideEdge="top">
        <targets>
            <target
                android:targetId="@+id/btn"/>
        </targets>
    </slide>
</transitionSet>


II.代码

getWindow().setExitTransition();//写在活动A
getWindow().setEnterTransition();//活动B
getWindow().setReturnTransition();//活动B
getWindow().setReenterTransition();//活动A

例如:

Slide slide=new Slide();
slide.setSlideEdge(Gravity.BOTTOM);
slide.addTarget(R.id.btn);
getWindow().setExitTransition(slide);


补充:

在进行页面切换的时候,切换的速度过快,导致切换效果无法完全显示

这时候,只要在style.xml加上下面的东西就行了

<item name="android:windowAllowEnterTransitionOverlap">false</item>
<item name="android:windowAllowReturnTransitionOverlap">false</item>

但是我发现,这样会使reenterTransition的动画效果无法显示,

而这时候只要删除

<item name="android:windowAllowReturnTransitionOverlap">false</item>

就可以了



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值