zoukankan      html  css  js  c++  java
  • replugin插件化,插件转场动画失效的问题解决

    说明

      随着应用功能的丰富,Android程序的安装包也逐渐变大,这成为应用程序现有框架下难以摆脱的瓶颈。所以引入了rePlugin插件化框架,将应用按功能拆分为插件,以此减小apk的大小并同时增加应用的灵活性。rePlugin相关信息见此处 https://github.com/Qihoo360 

    问题描述

      插件化开发过程中发现,插件程序中之前的转场动画出现异常,写在theme/styles中的动画会不展示,而在activity中调用 overridePendingTransition(int enterAnim, int exitAnim) 实现的专场动画会使程序卡死,黑屏。

    问题解决

      分析发现出现这一问题的原因是插件程序中的anim资源不能正常访问;而rePlugin官方的FEQ也验证了我们的猜想

     

     出处见链接 https://github.com/Qihoo360/RePlugin/wiki/%E5%B1%80%E9%99%90%E5%92%8C%E6%9C%AA%E6%9D%A5%E5%A4%A7%E8%AE%A1%E5%88%92

     而解决思路也有两个

    1.用系统的转场动画替换自定义的转场动画; 

    实现:

    跳转按钮的跳转方式:

    startActivity(new Intent(this, ExplodeActivity.class), ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

    在当前类(所要跳转的Activity页面) 中设置该Activity的进出场动画即可:

    getWindow().setEnterTransition(new Explode().setDuration(2000));  
    getWindow().setExitTransition(new Explode().setDuration(2000)); 

    使用系统提供的转场动画避开了对anim资源的访问,解决了上述的问题。具体实现 https://blog.csdn.net/w630886916/article/details/78319502 

    但是此方法会存在几个问题:

    • Android系统转场动画只支持5.0(sdk21)以上的系统;
    • 默认动画为Material Design风格动画,不一定与自己定义的动画完全一样
    • 退场动画只支持back出发而finish推出则不会出现退场动画。
    • 在singleTask模式下的退场动画不显示(原因不详)

    2.将动画资源放在宿主中,通过public.xml传递Id进行资源访问;

    由于第一种方式存在的诸多问题,我们推荐使用第二种方式,也是RePlugin官方提示的解决方式;

    第一步:将插件中用到的anim资源复制到host宿主程序的anim目录下(如不存在手动添加);之后进行编译。

    第二步:

     将宿主文件中anim资源对应的id写到宿主的public.xml中(关键步骤)

    注:资源id为编译生成可在R文件中查看,public.xml为手动添加;  android public.xml 用法

    第三步:将插件中用到的资源替换城宿主中public.xml对应的id

    运行,完美解决。

  • 相关阅读:
    (005)Linux 复制命令cp总提示是否覆盖的解决方法,在cp前加
    (030)Spring Boot之RestTemplate访问web服务案例
    Gym
    Gym
    Gym.102006:Syrian Collegiate Programming Contest(寒假自训第11场)
    BZOJ-5244 最大真因数(min25筛)
    HDU
    HDU 1272 小希的迷宫(并查集)
    HDU 3038 How Many Answers Are Wrong(带权并查集)
    POJ 1182 食物链(带权并查集)
  • 原文地址:https://www.cnblogs.com/ivoo/p/9407561.html
Copyright © 2011-2022 走看看