From 9b5599894b80b2707909e8e6872eeec7c58af73a Mon Sep 17 00:00:00 2001 From: Chet Haase Date: Thu, 9 Aug 2012 14:16:29 -0700 Subject: [PATCH] Fix shift/mask error in ArtbEvaluator Shifting from the left copies the MSB along with it. This causes a problem in ArgbEvaluator, which shifts the top byte down by 24 for the start/end colors, and then uses those values to interpolate alpha values. The correct appraoch (used with the other color components) is to mask by 0xff after the shift. Issue #6960514 External bug: ArgbEvaluator can't evaluate alpha value properly Change-Id: I750d38ddfecc5f30d8dab7c6d27d1a7ac06361c3 --- core/java/android/animation/ArgbEvaluator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/java/android/animation/ArgbEvaluator.java b/core/java/android/animation/ArgbEvaluator.java index c3875bee2c2d3..717a3d91f97e3 100644 --- a/core/java/android/animation/ArgbEvaluator.java +++ b/core/java/android/animation/ArgbEvaluator.java @@ -40,13 +40,13 @@ public class ArgbEvaluator implements TypeEvaluator { */ public Object evaluate(float fraction, Object startValue, Object endValue) { int startInt = (Integer) startValue; - int startA = (startInt >> 24); + int startA = (startInt >> 24) & 0xff; int startR = (startInt >> 16) & 0xff; int startG = (startInt >> 8) & 0xff; int startB = startInt & 0xff; int endInt = (Integer) endValue; - int endA = (endInt >> 24); + int endA = (endInt >> 24) & 0xff; int endR = (endInt >> 16) & 0xff; int endG = (endInt >> 8) & 0xff; int endB = endInt & 0xff;