安卓如何更改系统全局窗口动画

安卓如何更改系统全局窗口动画

背景

 公司项目增加了个远程控制的模块,全套流程已经实现了,但是发现在客户端网络不稳定的情况下因为安卓的动画原因会出现动画帧卡顿在屏幕上留下残影的问题,体验不是很好,想到了关闭动画减少画面传输优化这一过程

废话少说直接上代码

/*
    * 反射IWindowManager实现控制系统动画开关
    * 参考安卓开发者选项源码:packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java
    * */
    public static void hidenSystemAnim(boolean isClose) {
        try {
            Method getServiceMethod = Class.forName("android.os.ServiceManager").getDeclaredMethod("getService", new Class[]{String.class});
            Object ServiceManager = getServiceMethod.invoke(null, new Object[]{"window"});
            Class<?> cStub = Class.forName("android.view.IWindowManager$Stub");
            Method asInterface = cStub.getMethod("asInterface", IBinder.class);
            Object IWindowManager = asInterface.invoke(null, ServiceManager);
            //开关窗口动画
            IWindowManager.getClass().getDeclaredMethod("setAnimationScale",new Class[]{int.class,float.class})
            	.invoke(IWindowManager,new Object[]{0,isClose?0f:1f});
            //开关过渡动画
            IWindowManager.getClass().getDeclaredMethod("setAnimationScale",new Class[]{int.class,float.class})
            	.invoke(IWindowManager,new Object[]{1,isClose?0f:1f});
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

分析

1.通过阅读:packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java,打开会看到好多静态变量,
在这里插入图片描述
2.其中WINDOW_ANIMATION_SCALE_KEY,TRANSITION_ANIMATION_SCALE_KEY,为控制窗口动画缩放,过渡动画缩放的键
在这里插入图片描述
3.继续根据键值追查下去,可以发现在onCreate中键值被添加到了ListPreference并返回给了mWindowAnimationScale
在这里插入图片描述
4.跟踪mWindowAnimationScale,最终在onPreferenceChange中发现参数传递给了writeAnimationScaleOption方法,根据不同的Preference类型判断更改的对象
在这里插入图片描述
5.writeAnimationScaleOption方法,我们主要看1,3参数,根据witch来确定需要更改设置的类型,根据newValue来设置新的参数值
在这里插入图片描述
6.方法中调用了mWindowManager.setAnimationScale(which, scale);来设置新的参数值 mWindowManager 为AIDL对象,看看他的初始化过程,初始化过程的IWindowManager ServiceManager都是隐藏对象,使用反射机制获取即可
在这里插入图片描述

总结

1.小弟的第一篇博客,写的可能有点屎,望大家海涵……
2.以上过程为备用总结,如有不正还请谅解并指出,感谢。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值