android转场动画的两种方式

有空学习一下转场动画的使用

方法一:在代码中设置

分解,滑动进入,淡入淡出
参考:http://blog.csdn.net/u012702547/article/details/51289789

用法:
首先,把之前启动Activity的代码改成下面的写法:

[java] view plain copy print?
startActivity(new Intent(this, Main2Activity.class), ActivityOptions.makeSceneTransitionAnimation(this).toBundle());  

添加完成之后,在Main2Activity中设置该Activity的进出场动画即可:
1.分解

[java] view plain copy print?
getWindow().setEnterTransition(new Explode().setDuration(2000));  
getWindow().setExitTransition(new Explode().setDuration(2000));  

OK,就是这么简单,哦,对了,大家一定要记得在styles.xml文件中添加下面一行代码,表示激活Activity中元素的过渡效果:

[java] view plain copy print?
<item name="android:windowContentTransitions">true</item>  

2.滑动进入

[java] view plain copy print?
getWindow().setEnterTransition(new Slide().setDuration(2000));  
getWindow().setExitTransition(new Slide().setDuration(2000));  

3.淡入淡出

[java] view plain copy print?
getWindow().setEnterTransition(new Fade().setDuration(2000));  
        getWindow().setExitTransition(new Fade().setDuration(2000));  

4.共享元素

使用共享元素动画的时候,我们需要首先给MainActivity和Main2Activity中的两个button分别添加Android:transitionName=”mybtn”属性,并且该属性的值要相同,这样系统才知道这两个控件是共享元素。设置完成之后,接下来就是启动Activity的代码了,如下:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, mTv, "tv");
startActivityForResult(intent,REQUEST_CODE_COUNTRY,options.toBundle()/*ActivityOptions.makeSceneTransitionAnimation(this).toBundle()*/);

如果需要有多个共享元素,使用Pair

startActivity(new Intent(this, Main2Activity.class),  
                ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(((View) iv1),"myiv"), create(((View) textView),"mytv")).toBundle());  

方法二:在xml中设置

参考:http://blog.csdn.net/wl9739/article/details/52833668
步骤:

1.在 res/ 目录下创建 transition 文件夹,在该文件夹下定义界面转场动画和共享元素的动画。
2.在 res/value/style 文件中为每个 Activity 指定转场动画的 style ,并在 AndroidManifest.xml 文件中为每个 Activity 设置对应的 android:theme。
3.在 Activity 调用 startActivity() 切换动画前,使用 ActivityOptionsCompat 来创建转场动画时的共享对象。

同样是上面的三种效果,这里只演示一种集合
第一步:
detail_enter.xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <slide android:slideEdge="bottom">
        <targets>
            <target android:targetId="@id/cardview"/>
        </targets>
    </slide>

    <fade>
        <targets>
            <target android:excludeId="@android:id/statusBarBackground"/>
            <target android:excludeId="@android:id/navigationBarBackground"/>
            <target android:excludeId="@id/cardview"/>
        </targets>
    </fade>
</transitionSet>

main_exit.xml

<?xml version="1.0" encoding="utf-8"?>
<explode xmlns:android="http://schemas.android.com/apk/res/android">
    <targets>
        <target android:excludeId="@android:id/navigationBarBackground"/>
        <target android:excludeId="@android:id/statusBarBackground"/>
    </targets>
</explode>

标签里面定义需要转场(或者不需要转场)的目标 id ,这个 id 可以使系统自带的,也可以是我们自己视图中的 view 的 id,每一个 id 需要单独在 标签中定义,android:targetId 表示目标 ID 需要进行过渡转换的 view,而 android:excludeId 表示我们不需要该 ID 的 view 进行过渡转场。上面的那段代码的意思是说,除了状态栏和导航栏以外所有的 view,都执行 explode 动画。

第二步:
styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppTheme.Main">
        <item name="android:windowExitTransition">@transition/main_exit</item>
    </style>

    <style name="AppTheme.Detail">
        <item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">false</item>
        <item name="android:windowEnterTransition">@transition/detail_enter</item>
    </style>

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowContentTransitions">true</item>
    </style>
</resources>

第三步:

ActivityOptions options =
                ActivityOptions.makeSceneTransitionAnimation(this, mTv, "tv");


        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("city", "中国");
        startActivityForResult(intent, REQUEST_CODE_COUNTRY,options.toBundle()/*ActivityOptions.makeSceneTransitionAnimation(this).toBundle()*/);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值