diff --git a/res/values/colors.xml b/res/values/colors.xml
index dccc53e..15d4f52 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -4,16 +4,16 @@
 **
 ** Copyright 2008, The Android Open Source Project
 **
-** Licensed under the Apache License, Version 2.0 (the "License"); 
-** you may not use this file except in compliance with the License. 
-** You may obtain a copy of the License at 
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
 **
-**     http://www.apache.org/licenses/LICENSE-2.0 
+**     http://www.apache.org/licenses/LICENSE-2.0
 **
-** Unless required by applicable law or agreed to in writing, software 
-** distributed under the License is distributed on an "AS IS" BASIS, 
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-** See the License for the specific language governing permissions and 
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
 ** limitations under the License.
 */
 -->
@@ -37,6 +37,7 @@
     <color name="outline_color">#FFFFFFFF</color>
     <color name="all_apps_divider_color">#1E000000</color>
     <color name="all_apps_caret_color">#FFFFFFFF</color>
+    <color name="all_apps_container_color">#FFF2F2F2</color>
 
     <color name="spring_loaded_panel_color">#40FFFFFF</color>
     <color name="spring_loaded_highlighted_panel_border_color">#FFF</color>
diff --git a/src/com/android/launcher3/BaseContainerView.java b/src/com/android/launcher3/BaseContainerView.java
index f9c2407..57a60a9 100644
--- a/src/com/android/launcher3/BaseContainerView.java
+++ b/src/com/android/launcher3/BaseContainerView.java
@@ -36,7 +36,8 @@
 
     protected final int mHorizontalPadding;
 
-    private final Drawable mRevealDrawable;
+    private final InsetDrawable mRevealDrawable;
+    private final ColorDrawable mDrawable;
 
     private View mRevealView;
     private View mContent;
@@ -63,14 +64,16 @@
         }
 
         if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP && this instanceof AllAppsContainerView) {
-            mRevealDrawable = new InsetDrawable(new ColorDrawable(Color.WHITE), mHorizontalPadding,
-                    0, mHorizontalPadding, 0);
+            mDrawable = new ColorDrawable();
+            mRevealDrawable = new InsetDrawable(mDrawable,
+                    mHorizontalPadding, 0, mHorizontalPadding, 0);
         } else {
             TypedArray a = context.obtainStyledAttributes(attrs,
                     R.styleable.BaseContainerView, defStyleAttr, 0);
             mRevealDrawable = new InsetDrawable(
                     a.getDrawable(R.styleable.BaseContainerView_revealBackground),
                     mHorizontalPadding, 0, mHorizontalPadding, 0);
+            mDrawable = null;
             a.recycle();
         }
     }
@@ -82,8 +85,12 @@
         mContent = findViewById(R.id.main_content);
         mRevealView = findViewById(R.id.reveal_view);
 
-        mRevealView.setBackground(mRevealDrawable.getConstantState().newDrawable());
-        mContent.setBackground(mRevealDrawable);
+        if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP && this instanceof AllAppsContainerView) {
+            mRevealView.setBackground(mRevealDrawable);
+        } else {
+            mRevealView.setBackground(mRevealDrawable.getConstantState().newDrawable());
+            mContent.setBackground(mRevealDrawable);
+        }
 
         // We let the content have a intent background, but still have full width.
         // This allows the scroll bar to be used responsive outside the background bounds as well.
@@ -97,4 +104,8 @@
     public final View getRevealView() {
         return mRevealView;
     }
+
+    public void setRevealDrawableColor(int color) {
+        mDrawable.setColor(color);
+    }
 }
diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java
index b75d2c0..7e2b42e 100644
--- a/src/com/android/launcher3/Hotseat.java
+++ b/src/com/android/launcher3/Hotseat.java
@@ -23,6 +23,7 @@
 import android.graphics.Rect;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
+import android.support.v4.graphics.ColorUtils;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -67,7 +68,9 @@
         super(context, attrs, defStyle);
         mLauncher = (Launcher) context;
         mHasVerticalHotseat = mLauncher.getDeviceProfile().isVerticalBarLayout();
-        mBackground = new ColorDrawable();
+        mBackgroundColor = ColorUtils.setAlphaComponent(
+                context.getColor(R.color.all_apps_container_color), 0);
+        mBackground = new ColorDrawable(mBackgroundColor);
         setBackground(mBackground);
     }
 
@@ -227,7 +230,7 @@
         }
     }
 
-    public int getBackgroundDrawableAlpha() {
-        return Color.alpha(mBackgroundColor);
+    public int getBackgroundDrawableColor() {
+        return mBackgroundColor;
     }
 }
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index f0469e3..195ab47 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -366,9 +366,7 @@
 
         // TODO(hyunyoungs): clean up setting the content and the reveal view.
         if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP) {
-            getContentView().setBackground(null);
             getRevealView().setVisibility(View.VISIBLE);
-            getRevealView().setAlpha(AllAppsTransitionController.ALL_APPS_FINAL_ALPHA);
         }
     }
 
diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
index f6e028b..85af60e 100644
--- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java
+++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
@@ -3,7 +3,9 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
+import android.animation.ArgbEvaluator;
 import android.animation.ObjectAnimator;
+import android.graphics.Color;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
@@ -43,14 +45,14 @@
     private final Interpolator mDecelInterpolator = new DecelerateInterpolator(1f);
 
     private static final float ANIMATION_DURATION = 1200;
-    public static final float ALL_APPS_FINAL_ALPHA = .9f;
 
     private static final float PARALLAX_COEFFICIENT = .125f;
 
     private AllAppsContainerView mAppsView;
+    private int mAllAppsBackgroundColor;
     private Workspace mWorkspace;
     private Hotseat mHotseat;
-    private float mHotseatBackgroundAlpha;
+    private int mHotseatBackgroundColor;
 
     private ObjectAnimator mCaretAnimator;
     private final long mCaretAnimationDuration;
@@ -60,6 +62,7 @@
 
     private final Launcher mLauncher;
     private final VerticalPullDetector mDetector;
+    private final ArgbEvaluator mEvaluator;
 
     // Animation in this class is controlled by a single variable {@link mShiftCurrent}.
     // Visually, it represents top y coordinate of the all apps container. Using the
@@ -95,6 +98,8 @@
                 R.integer.config_caretAnimationDuration);
         mCaretInterpolator = AnimationUtils.loadInterpolator(launcher,
                 R.interpolator.caret_animation_interpolator);
+        mEvaluator = new ArgbEvaluator();
+        mAllAppsBackgroundColor = launcher.getColor(R.color.all_apps_container_color);
     }
 
     @Override
@@ -248,17 +253,15 @@
             mStatusBarHeight = mLauncher.getDragLayer().getInsets().top;
             mHotseat.setVisibility(View.VISIBLE);
             mHotseat.bringToFront();
-
             if (!mLauncher.isAllAppsVisible()) {
                 mLauncher.tryAndUpdatePredictedApps();
-
-                mHotseatBackgroundAlpha = mHotseat.getBackgroundDrawableAlpha() / 255f;
+                mHotseatBackgroundColor = mHotseat.getBackgroundDrawableColor();
                 mHotseat.setBackgroundTransparent(true /* transparent */);
                 mAppsView.setVisibility(View.VISIBLE);
                 mAppsView.getContentView().setVisibility(View.VISIBLE);
                 mAppsView.getContentView().setBackground(null);
                 mAppsView.getRevealView().setVisibility(View.VISIBLE);
-                mAppsView.getRevealView().setAlpha(mHotseatBackgroundAlpha);
+                mAppsView.setRevealDrawableColor(mHotseatBackgroundColor);
             }
         } else {
             setProgress(mShiftCurrent);
@@ -297,8 +300,9 @@
         float alpha = calcAlphaAllApps(progress);
         float workspaceHotseatAlpha = 1 - alpha;
 
-        mAppsView.getRevealView().setAlpha(Math.min(ALL_APPS_FINAL_ALPHA, Math.max(mHotseatBackgroundAlpha,
-                mDecelInterpolator.getInterpolation(alpha))));
+        int color = (Integer) mEvaluator.evaluate(mDecelInterpolator.getInterpolation(alpha),
+                mHotseatBackgroundColor, mAllAppsBackgroundColor);
+        mAppsView.setRevealDrawableColor(color);
         mAppsView.getContentView().setAlpha(alpha);
         mAppsView.setTranslationY(progress);
         mWorkspace.setWorkspaceYTranslationAndAlpha(
