[英]How to disable “Window animation scale” programmatically on Android 4.0+ devices?
我正在使用一个使用WindowManager
显示视图的服务 ,每次使用时更改视图的大小都会出现动画
windowManagerLayoutParams.height = newHeight;
((WindowManager) getSystemService(WINDOW_SERVICE)).updateViewLayout(mMainLayout, windowManagerLayoutParams);
如果我手动禁用缩放动画,则不会发生动画。 手动禁用缩放动画,如下所示: http : //www.cultofandroid.com/11143/android-4-0-tip-how-to-find-and-disable-animations-for-a-snappier-experience/
有没有办法以编程方式为我的应用程序禁用窗口缩放动画?
我在使用SystemUI包中的系统覆盖时遇到了同样的问题,并决定挖掘源代码以查看是否可以找到解决方案。 WindowManager.LayoutParams有一些隐藏的好东西,可以解决这个问题。 诀窍是使用WindowManager.LayoutParams的privateFlags成员,如下所示:
windowManagerLayoutParams.privateFlags |= 0x00000040;
如果查看WindowManager.java的第1019行,您将看到0x00000040是PRIVATE_FLAG_NO_MOVE_ANIMATION的值。 对我来说,当我通过updateViewLayout()更改大小时,这确实阻止了我的视图上出现的窗口动画
我有使用系统包的优势,因此我可以直接在我的代码中访问privateFlags,但如果要访问此字段,则需要使用反射。
正如@clark所说,这可以使用反射来改变:
private void disableAnimations() {
try {
int currentFlags = (Integer) mLayoutParams.getClass().getField("privateFlags").get(mLayoutParams);
mLayoutParams.getClass().getField("privateFlags").set(mLayoutParams, currentFlags|0x00000040);
} catch (Exception e) {
//do nothing. Probably using other version of android
}
}
你尝试过Activity#overridePendingTransition(0, 0)
吗?
查看文档 :
在startActivity(Intent)或finish()的一种风格之后立即调用,以指定下一步要执行的显式转换动画。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.