From 32fed96632f6216ff5ec983a1aa13bdb2117c3c8 Mon Sep 17 00:00:00 2001 From: Qiushi Han Date: Sat, 1 Oct 2016 17:06:49 +0800 Subject: [PATCH] Fix window animation flash issue The original logic cuts down the mShownPosition, causing 1 pixel offset, sometimes this will cause flash. To fix this, Use Math.round() instead. google issue: https://code.google.com/p/android/issues/detail?id=224185 Change-Id: I8a2fe55a2df6eaa9eda4ba78966a74ea492ab8ea --- .../core/java/com/android/server/wm/WindowStateAnimator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 36d96979d36ec..afd451da211c8 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1033,7 +1033,7 @@ class WindowStateAnimator { mDtDy = tmpFloats[Matrix.MSCALE_Y]; float x = tmpFloats[Matrix.MTRANS_X]; float y = tmpFloats[Matrix.MTRANS_Y]; - mWin.mShownPosition.set((int) x, (int) y); + mWin.mShownPosition.set(Math.round(x), Math.round(y)); // Now set the alpha... but because our current hardware // can't do alpha transformation on a non-opaque surface, @@ -1129,7 +1129,7 @@ class WindowStateAnimator { mDtDy = tmpFloats[Matrix.MSCALE_Y]; float x = tmpFloats[Matrix.MTRANS_X]; float y = tmpFloats[Matrix.MTRANS_Y]; - mWin.mShownPosition.set((int) x, (int) y); + mWin.mShownPosition.set(Math.round(x), Math.round(y)); mShownAlpha = mAlpha; } else {