Android Activity跳转动画效果
activity的跳转动画在5.0的时候做了一个重大的突破,下面来看一下吧
1.5.0之前的overridependingtransition
相信大家对overridependingtransition还是很熟悉的,使用方法也是很简单就是
//fade_in是第二个界面的进入动画,fade_out是第一个界面退出动画,不想动画传入0
overridependingtransition(r.anim.fade_in,r.anim.fade_out);
fade_in :
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="4000" android:fromydelta="100%" android:toydelta="0"/>
fade_out:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:toxdelta="0" android:fromxdelta="-100%" android:duration="4000" />
对应动画效果
用的时候又一个缺点就是必须用在finish() 或者startactivity() 方法之后, 而此之外相对与5.0的动画,他的动画效果只在activity的界面有效果,对于其中的控件,是没有相应的效果的,
2.5.0的效果
相对与之前的效果,5.0做了一个很大的改变,首先我们不用写xml文件了,系统直接封装好了,我们只要调用就好了,当然,由于动画没有对5.0之前做兼容,所以我们在5.0之前的手机还是要做下兼容,当然这是后话了。首先我们来看下5.0的效果
准备工作: (针对1,2,3的操作)
1.告诉window界面需要切换动画 有两种方式
a. 直接在styles.xml(21)添加<item name="android:windowcontenttransitions">true</item>
b.在 setcontentview()之前加上
getwindow().requestfeature(window.feature_content_transitions);
2.在startactivity()界面跳转使用
startactivity(intent,activityoptions.makescenetransitionanimation(this).tobundle());
到此接下来的所有操作在跳转进入的界面做操作就好了
一.explode 分解(有的人叫爆炸)动画
也是有2种方式实现
1.代码
//此activity进入 getwindow().setentertransition(new explode().setduration(2000)); //此activity退出 getwindow().setexittransition(new explode().setduration(2000)); //再次进入时使用(如果当前activity已经打开过,并且再次打开该activity时的动画 ) //getwindow().setreentertransition(new explode().setduration(2000)); //决定在两个activity之间切换时,指定两个activity中对应的view的过渡效果 // getwindow().setsharedelemententertransition(new explode().setduration(2000));
2.explode写入res/transition文件夹下的xml中
<explode xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" />
a. 然后通过
transition explode = transitioninflater.from(this).inflatetransition(r.transition.explode); getwindow().setentertransition(explode); getwindow().setexittransition(explode);
b.也可以在主题中配置
<item name="android:windowexittransition">@transition/explode</item> <item name="android:windowenteranimation">@transition/explode</item> <item name="android:windowreentertransition">@transition/explode</item>
二 fade 淡入淡出
getwindow().setentertransition(new fade().setduration(2000)); getwindow().setexittransition(new fade().setduration(2000));
三 slide 滑动进入
//左侧滑入 getwindow().setentertransition(new slide(gravity.left).setduration(2000)); getwindow().setexittransition(new slide(gravity.right).setduration(2000));
b .xml中的话
<?xml version="1.0" encoding="utf-8"?> <!--slideedge表示起始滑动的侧边位置,end表示右侧,start表示左侧,top表示顶部,bottom表示底侧--> <slide xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:slideedge="end"> <!--去掉顶部状态栏,底部操作栏的滑动--> <targets> <target android:excludeid="@android:id/navigationbarbackground" /> <target android:excludeid="@android:id/statusbarbackground" /> </targets> </slide>
5.0的共享元素动画
1.系统自带的
a.一个共享view
首先用到的activity的跳转方法是(一个共享view的):
startactivity(intent,activityoptions.makescenetransitionanimation(this,button,"all_hava").tobundle());
说下参数 button表示这个共享的view,后面的字符串 “all_hava”是两个共享view在xml中的 android:transitionname="all_hava"
用到的就是这些,是不是很简单
b.多个 共享view
这里我们稍稍看下源码makescenetransitionanimation(activity activity, pair<view, string>... sharedelements),知道可以利用pair来传参数 ,格式如下,不多说了
startactivity(intent,activityoptions.makescenetransitionanimation(this, create(((view) button),"all_hava"), create(((view) textview),"all_hava")) .tobundle())
系统自带的差不多已经够用了,如果我们要玩点自定义的呢
剩下的在来说下兼容问题,因为只有5.0以上才有上面的这些个动画,所以,我们肯定是要做兼容的 首先肯定是要加判断的
if(build.version.sdk_int>= build.version_codes.lollipop){ startactivity(intent,activityoptions.makescenetransitionanimation(this,button,"all_hava").tobundle()); }else{ a. //低版本兼容,不过没动画效果 http://www.cnblogs.com/tianzhijiexian/p/4087917.html 可以看下这个介绍 activityoptionscompat optionscompat = activityoptionscompat.makescaleupanimation( button, 0, 0, 0, 0); activitycompat.startactivity(this,intent,optionscompat.tobundle()); b. //或者是直接用overridependingtransition(); }
以上所述是小编给大家介绍的android activity跳转动画效果,希望对大家有所帮助