Shadow
Shadow copied to clipboard
插件的activity默认动画如何跟系统一致
现在的动画跟系统默认的不一致,感觉很奇怪,按照另一个帖子和ShadowActivity里的说明设置了overridePendingTransition引用了系统提供的动画,但是效果不是我想要的,我现在想让它恢复默认的动画,请问作者该怎么做?
如果你指的是activity的转场动画,这个问题确实已经有朋友提出过,通过锁定资源id的方式,但我目前的实践是这样的: 1,回避使用主题转场动画,转而使用代码调用方式(overridePendingTransition) 2,采用overridePendingTransition,需打通宿主与插件的转场动画资源
第1点的原因,作者也指出了,凡是针对需要传递资源id的系统api,插件框架是无法介入到framework内部的,这也是为啥shadow在实现overridePendingTransition方法时,直接将资源id置为0 一般业务Activity都有类似BaseActivity的基类,可以在基类中调用overridePendingTransition,以实现默认的转场动画
第2点的具体方式是修改框架源码,调整overridePendingTransition的实现,根据id转换为资源名称,通过名称到宿主里找同名资源,将(宿主的)资源id传递给overridePendingTransition方法,源码如下示: ` public void overridePendingTransition(int enterAnim, int exitAnim) {
if (enterAnim != 0 && (enterAnim & 0xFF000000) != 0x01000000) {
// 通过名称从宿主里去找对应资源(宿主里应该拷贝一份同名的资源)
String name = getResources().getResourceName(enterAnim);
enterAnim = getBaseContext().getApplicationContext().getResources().getIdentifier(name, null, null);
}
if (exitAnim != 0 && (exitAnim & 0xFF000000) != 0x01000000) {
String name = getResources().getResourceName(exitAnim);
exitAnim = getBaseContext().getApplicationContext().getResources().getIdentifier(name, null, null);
}
// 以固定anim资源id的方式在host工程中维护同样的anim资源备份
hostActivityDelegator.overridePendingTransition(enterAnim, exitAnim);
}`
当然也可以通过锁定资源id的方式,插件动画资源在系统api中无缝使用。这两种方式的缺点都是需要在宿主中保持转场动画资源的重复拷贝,一定程度上增加了维护的成本,通过引入脚本自动完成冗余拷贝可以去掉上述维护成本。
如果你指的是activity的转场动画,这个问题确实已经有朋友提出过,通过锁定资源id的方式,但我目前的实践是这样的: 1,回避使用主题转场动画,转而使用代码调用方式(overridePendingTransition) 2,采用overridePendingTransition,需打通宿主与插件的转场动画资源
第1点的原因,作者也指出了,凡是针对需要传递资源id的系统api,插件框架是无法介入到framework内部的,这也是为啥shadow在实现overridePendingTransition方法时,直接将资源id置为0 一般业务Activity都有类似BaseActivity的基类,可以在基类中调用overridePendingTransition,以实现默认的转场动画
第2点的具体方式是修改框架源码,调整overridePendingTransition的实现,根据id转换为资源名称,通过名称到宿主里找同名资源,将(宿主的)资源id传递给overridePendingTransition方法,源码如下示: ` public void overridePendingTransition(int enterAnim, int exitAnim) {
if (enterAnim != 0 && (enterAnim & 0xFF000000) != 0x01000000) { // 通过名称从宿主里去找对应资源(宿主里应该拷贝一份同名的资源) String name = getResources().getResourceName(enterAnim); enterAnim = getBaseContext().getApplicationContext().getResources().getIdentifier(name, null, null); } if (exitAnim != 0 && (exitAnim & 0xFF000000) != 0x01000000) { String name = getResources().getResourceName(exitAnim); exitAnim = getBaseContext().getApplicationContext().getResources().getIdentifier(name, null, null); } // 以固定anim资源id的方式在host工程中维护同样的anim资源备份 hostActivityDelegator.overridePendingTransition(enterAnim, exitAnim); }`
当然也可以通过锁定资源id的方式,插件动画资源在系统api中无缝使用。这两种方式的缺点都是需要在宿主中保持转场动画资源的重复拷贝,一定程度上增加了维护的成本,通过引入脚本自动完成冗余拷贝可以去掉上述维护成本。
你好,我按照你的方式设置后,进场动画生效了,但是退场动画不生效,请问可能是什么原因导致的呢,资源都有