如何防止开发者选项关闭动画后使其失效
很多用户为了手机用起来感觉上快,在开发者选项里把系统动画给关了,即把那3个缩放比例改成了0,系统默认一般是1x。个人建议调到0.5x就很合适了,没必要关闭,否则某些动效比较多的App体验会很差。
本文的问题就是,当开发者选项中的动画缩放比例被全部调成0后,App中部分设置了duration的属性动画就会失效,表现为直接从开头跳到了结尾,没有动画过程。
我们先分析下为什么会这样。
看ValueAnimator(/frameworks/base/core/java/android/animation/ValueAnimator.java)的部分源码:
public final boolean doAnimationFrame(long frameTime) {......if (mLastFrameTime < 0) {if (mSeekFraction >= 0) {long seekTime = (long) (getScaledDuration() * mSeekFraction); // 开发者选项改后此处为0mStartTime = frameTime - seekTime;mSeekFraction = -1;}mStartTimeCommitted = false;}mLastFrameTime = frameTime;final long currentTime = Math.max(frameTime, mStartTime);boolean finished = animateBasedOnTime(currentTime);if (finished) {endAnimation();}return finished;
}boolean animateBasedOnTime(long currentTime) {boolean done = false;if (mRunning) {final long scaledDuration = getScaledDuration(); // 开发者选项改后此处为0......if (scaledDuration == 0) {// 0 duration animator, ignore the repeat count and skip to the enddone = true;} ......}return done;
}private long getScaledDuration() {return (long)(mDuration * sDurationScale); // 开发者选项修改直接影响sDuration的值
}
动画绘制是否结束取决于animateBasedOnTime方法,源码也注释到,如果duration为0,会忽略repeat count直接跳到结束状态。这里的sDurationScale也就是开发者选项中设置的动画缩放倍数。
我们只要在动画初始化后,通过反射来重置一下这个静态变量即可:
private void resetAnimatorDurationScale() {try {Field field = ValueAnimator.class.getDeclaredField("sDurationScale");field.setAccessible(true);if (field.getFloat(null) == 0) {field.setFloat(null, 1);}} catch (NoSuchFieldException | IllegalAccessException e) {e.printStackTrace();}
}
但很显然,系统会在应用进程重启后第一次调用getWindowManagerService时重设这个值,所以必须得每次启动后都设置一次(比如在主Activity的onCreate中)。
如何防止开发者选项关闭动画后使其失效相关推荐
- 关于解决Android系统开发者选项关闭动画后ValueAnimator不生效的问题
一.前言 由于用户在开发者选项中关闭了动画的效果,导致App的动画不生效.但是有的App动画效果被关闭了,还依旧能有动画效果产生,这就让我们的用户觉得这是个BUG
- windows10加载动画_如何关闭动画并使Windows 10看起来更快
windows10加载动画 Windows 10 fades and window animations are pure eye candy, but waiting for them to loa ...
- 开发打开设置洁面_用了两到三年的华为手机,一键打开开发者选项,帮助性能加速...
用了两到三年的华为手机,可以一键打开"开发者选项",帮助性能加速 我们手机用了两到三年,速度和刚买的时候相比,明显是变慢了一大截.今天笔者就带来一个华为手机的使用小技巧,华为开发者 ...
- 开发打开设置洁面_用了两到三年的华为手机,一键打开quot;开发者选项quot;,帮助性能加速...
阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 我们手机用了两到三年,速度和刚买的时候相比,明显是 ...
- 华为荣耀5X(畅玩版 全网通)USB调试模式如何开启教程(开发者模式 开发者选项打开)
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, 前一段时间,公司买了一款华为荣耀畅玩版5X全网通,进行测试.发现 拿usb数据线连接PC电脑,无法进 ...
- Android Studio 选项菜单和动画结合_安卓手机关于“开发者选项”你该知道的几件事...
原标题:安卓手机关于"开发者选项"你该知道的几件事 MIUI.Flyme.EMUI.氢OS.ColorOS等等,这些都是我们耳熟能详的手机系统的名字.它们都是基于Android系统 ...
- 安卓开发者选项菜单里的动画选项都代表什么含义?
第一项:提交错误报告 将本机上安卓系统的出错日志以及硬件设备信息发送给谷歌.建议:当然不想泄露自己隐私的话,不要使用! 第二项:桌面密码备份 设置或更新桌面完整备份的密码.建议:没必要设置,谁动你的备 ...
- 小米打开或关闭MIUI9开发者选项
工具/原料 升级至MIUI9的设备一台. 一.开发者选项的进入 1.首先开机,来到手机主界面,点击"设置". 2.进入"设置"界面之后,点击最顶端的" ...
- android关闭开发者选项,开发人员选项怎么关闭?安卓手机开发人员选项功能隐藏方法介绍...
安卓手机中的"开发人员选项"相信大家都不会陌生,很多安卓手机第一次连接电脑,都需要进入开发者选项里面,开启USB调试.很多手机需要在设置中,狂按版本号七八次,才能调出开发人员选项. ...
最新文章
- 基于Centos搭建nginx+uwsgi运行django环境
- FastDFS扩展开发说明
- 【bzoj1034】[ZJOI2008]泡泡堂BNB 贪心
- Oracle通过主键id删除记录很慢
- 8月全球搜索引擎市场:百度位居第四 份额大涨
- orchard文档之-搜索和索引
- 【C】输出乘法口诀表
- 递归法:求两个串的最大公共子序列的长度
- python网络爬虫程序_Python写的网络爬虫程序(很简单)
- 编写安全的驱动程序之验证驱动的调用者
- AD7705在STM32F103RBT6上的移植[硬件SPI]
- 海尔笔记本X3超级本拆机增加内存图文教程(解决后盖开不了问题)
- 关于android读取用户号码,手机串号,SIM卡序列号
- 台式电脑c语言如何安装,台式电脑怎么安装电源 组装机正确安装电源的方法
- 微信小程序如何上拉加载下一页
- 树的平衡 AVL Tree
- 基于curl 的zabbix API调用
- linux用户解锁pam_tally,Linux使用PAM锁定多次登陆失败的用户(含重置错误次数)...
- 数学建模笔记-第五讲-相关系数
- 什么是pinterest