[英]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.