Activity转场动画

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a396604593/article/details/71602667

小记:需求说要改改Launcher启动Activity时,Launcher和Activity跳转的动画,让跳转更自然。

。。。哔哩哔哩哔哩。。。经过小编一番百度之后发现,

发现几种方式

1、ActivityOptions

2、overridePendingTransition(int enterAnim, intexitAnim)

Launcher启动Activity时,新activity界面的出现和Launcher的退出衔接动画。

这两种方式只能实现从Launcher启动Activity的动画,从第三方应用返回Launcher还是系统动画。

这两种的实现方式都很容易百度到,随手小记,记录一下知识点。生气

好吧,真正的原因是,小编也在摸索中,,,

*******************************************************************************************************

*******************************************************************************************************

经过几天的摸索,从Launcher启动应用(startActivity)和从应用返回Launcher的转场动画都找到了修改点。

下面简单的介绍一下:

从Launcher启动应用转行动画

修改点在startActivity时传入:

startActivity(Intent intent, @Nullable Bundle options)

第一个参数intent表示启动哪个应用,第二个参数bundle表示动画。

这里的动画小编使用xml方式:

ActivityOptions.makeCustomAnimation(this,
        R.anim.activity_open_enter, R.anim.activity_open_exit);
这里,第一个参数表示startActivity时,即将进入的Activity动画、第二个表示startActivity时,Launcher退出的动画。

从其他应用返回Launcher的转场动画

在网上找到说设置style的方法,实现activity退出时动画。然而Launcher这边并没有效果。。。。

跟踪 framework/base/services/core/java/com/android/server/wm/AppTransition.java中loadAnimation方法。
发现从第三方应用返回Launcher时,上面方法中的 transit值为 13,对应的case见下图:
然后根据enter标记判断出是退出的应用还是进入的应用分别拿到不同的动画,并取值framework里默认的动画。

然后,小编猜测,既然framework有默认的动画,如果改了这里,那就改了所有这种情况的动画。由于第一次接触framework层代码,没敢直接改。
(但应该可以应用自己设置这两个属性的动画,心里默默的想到)
然后就想起了网上说的style方法,是不是属性设置的不对导致读取了framework的默认动画。so,经过一番尝试,终于成功的修改了从其他应用返回Launcher的转场动画。
style如下:

然后在LauncherActivity的theme里加上动画:

就ok啦~~!!!!!
注意: 上面说的transit值为13是和当前Activity的主题有关的(全靠摸索和试验,没找到具体代码逻辑支持)
即,你用哪个activity启动别的Activity,当你返回上一个Activity时,就会根据主题得到不同的类型。


如上图所示,当我注释掉主题里的windowShowWallpaper时,从其他应用返回launcher的动画就变掉了,因为framework中 loadAnimationtransit值不再为 13
而变成了11,而11对应的case是:

对应的动画应该设:

由此可推断出,加载动画并不是固定的,而是根据Activity的属性决定的。
另外,,,,,,
我自己写的 搜索activity,,从launcher启动搜索,启动方式如下:



搜索Activity的主题如下:


当我搜索到手机安装app时,点击启动app,再返回搜索Activity时,framework中 loadAnimationtransit值为9,
对应的 动画属性为:


所以主题里设置了这两个动画。

可能,小编解说的不太清楚,但从上面几个例子可以看出一些东西了。共勉之~~
***************************************************************************************************************************************
***************************************************************************************************************************************
另,近期任务的转场动画同样方法设置,启动动画在startActivity时,通过第二个参数传入动画的xml就好了。
退出近期任务的动画(我们改过了近期任务源码,退出也是启动Activity,so方法同上)。

近期任务代码在SystemUI中,frameworks/base/packages/SystemUI/src/com/android/systemui/recents/Recents.java中跟踪到startActivity为止。
近期任务返回应用代码在ItsRecentsActivity.java中,因为我们修改了近期任务,略有变动(源码可能在RecentsActivity.java里)。

通过最后一个参数传入动画。
由于第一次接触framework,无法写的很详细,只能通过加log来看一下代码逻辑,,,,,暂时记录到这里。

猜你喜欢

转载自blog.csdn.net/a396604593/article/details/71602667