android 元素共享动画,共享元素动画在Android 10上异常的解决方案(全网唯一仅此一份)...

问题描述

最近在项目中遇到一个关于共享元素动画失效的问题,在Activity跳转时使用ActivityOptionsCompat.makeSceneTransitionAnimation做转场动画, 对于Activity共享元素动画的使用不懂的童鞋自行谷歌,网上资料太多,这里就不做描述了。

一般情况下使用ActivityOptionsCompat.makeSceneTransitionAnimation做转场动画时,当Activity返回时也会伴随返回的动画。但是就是这样的一个简单的API, 居然在Android 10上测试出现了异常:

如果使用了ActivityOptionsCompat.makeSceneTransitionAnimation跳转的Activity没有再次跳转到别的Activity的话,返回时系统是带上响应的共享元素动画的, 但是如果跳转的Activity再次跳转了其他的Activity,然后再返回的话共享元素的返回动画就失效了(包括按了Home键退回桌面,然后再次进入也会失效)。

笔者的测试手机是华为nova 5i,系统是Android 10。

问题追踪

1、 大神方案

当笔者看到这个bug的时候,首先想到的可能是我打开的方式不对,于是谷歌百度了一波,结果确实无功而返。

于是笔者第一想到的就是是不是自己的使用方式不对,于是看看大神是怎么使用的,然后参考了一下Android 大神郭霖开源的一个开源项目giffun, 发现giffun也存在同样的异常...

为此我专门给giffun提了一个issue:

https://github.com/guolindev/giffun/issues/67

绝望了。。。。。。。

2、 竞品对比

既然查找不到相关的资料,那么就看看竞品是否也有这样的问题的,如果竞品也有这样的问题话就可以拿着竞品去忽悠产品了,心里美滋滋。

于是笔者对比了一下竞品的产品是否也存在这么的一个bug,发现竞品没有一样的bug,它们的共享元素动画一切正常。后面通过研究了它们的APK才发现它们的共享元素动画是使用Fragment做的,所以尽量使用Fragment的一个好处又体现出来了。

但是笔者今天要说的将Activity的转场动画改为Fragment这样就完事了,今天将带大家一步一步分析共享元素动画是如何失效的,如何修复这样的一个bug。

3、 源码先行

既然网上没有这样的资料,那就自己动手,丰衣足食了。首先我们初步看看Activity的源码,发现如果是返回执行共享元素动画的话执行的方法是finishAfterTransition。 在finishAfterTransition里面调用了ActivityTransitionState的startExitBackTransition方法。

然而看源码并没有看出什么破绽,毕竟大多数手机是正常的,只有在Android 10上才出现了异常。既然这条路走不通,那我们就换一个途径吧。

4、 Debug大法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值