diff --git a/res/layout/fragment_clock_picker.xml b/res/layout/fragment_clock_picker.xml
index b61c268..f24a354 100644
--- a/res/layout/fragment_clock_picker.xml
+++ b/res/layout/fragment_clock_picker.xml
@@ -16,6 +16,7 @@
 -->
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
@@ -27,7 +28,8 @@
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1"
-        android:background="@color/secondary_color"/>
+        android:background="@color/secondary_color"
+        app:card_style="screen_aspect_ratio"/>
 
     <LinearLayout
         android:id="@+id/options_section"
diff --git a/res/layout/fragment_grid_picker.xml b/res/layout/fragment_grid_picker.xml
index db28f60..61cdfcf 100644
--- a/res/layout/fragment_grid_picker.xml
+++ b/res/layout/fragment_grid_picker.xml
@@ -17,7 +17,7 @@
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"
     android:orientation="vertical"
     android:background="@color/category_picker_background_color">
     <include layout="@layout/section_header"/>
@@ -27,7 +27,8 @@
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1"
-        android:background="@color/secondary_color"/>
+        android:background="@color/secondary_color"
+        app:card_style="screen_aspect_ratio"/>
 
     <LinearLayout
         android:id="@+id/options_section"
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
new file mode 100644
index 0000000..ce995cc
--- /dev/null
+++ b/res/values/attrs.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+     Copyright (C) 2019 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
+
+          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
+     limitations under the License.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- PreviewPager specific attributes. -->
+    <declare-styleable name="PreviewPager">
+        <attr name="card_style" format="integer">
+            <!-- The cards are sized so that a small part of the next card in the pager can be seen
+                peeking from the side. -->
+            <enum name="peeking" value="0" />
+            <!-- Cards are sized to match the screen's aspect ratio (based on available height) -->
+            <enum name="screen_aspect_ratio" value="1" />
+        </attr>
+    </declare-styleable>
+</resources>
\ No newline at end of file
diff --git a/src/com/android/customization/picker/grid/GridFragment.java b/src/com/android/customization/picker/grid/GridFragment.java
index e232e5f..845d008 100644
--- a/src/com/android/customization/picker/grid/GridFragment.java
+++ b/src/com/android/customization/picker/grid/GridFragment.java
@@ -54,6 +54,8 @@
  */
 public class GridFragment extends ToolbarFragment {
 
+    private static final int PREVIEW_FADE_DURATION_MS = 100;
+
     /**
      * Interface to be implemented by an Activity hosting a {@link GridFragment}
      */
@@ -67,11 +69,11 @@
         return fragment;
     }
 
-    private boolean mIsWallpaperInfoReady;
     private WallpaperInfo mHomeWallpaper;
     private float mScreenAspectRatio;
-    private int mPageHeight;
-    private int mPageWidth;
+    private int mCardHeight;
+    private int mCardWidth;
+    private BitmapDrawable mCardBackground;
     private GridPreviewAdapter mAdapter;
     private RecyclerView mOptionsContainer;
     private OptionSelectorController mOptionsController;
@@ -94,7 +96,7 @@
         setUpToolbar(view);
         mPreviewPager = view.findViewById(R.id.grid_preview_pager);
         mOptionsContainer = view.findViewById(R.id.options_container);
-        final Resources res = getContext().getResources();
+        final Resources res = getResources();
         DisplayMetrics dm = res.getDisplayMetrics();
         mScreenAspectRatio = (float) dm.heightPixels / dm.widthPixels;
         setUpOptions();
@@ -103,29 +105,41 @@
             getActivity().finish();
         });
         CurrentWallpaperInfoFactory factory = InjectorProvider.getInjector()
-                .getCurrentWallpaperFactory(getActivity().getApplicationContext());
+                .getCurrentWallpaperFactory(getContext().getApplicationContext());
 
         factory.createCurrentWallpaperInfos((homeWallpaper, lockWallpaper, presentationMode) -> {
             mHomeWallpaper = homeWallpaper;
-            mIsWallpaperInfoReady = true;
-            if (mAdapter != null) {
-                mAdapter.onWallpaperInfoLoaded();
-            }
+            loadWallpaperBackground();
+
         }, false);
         view.addOnLayoutChangeListener(new OnLayoutChangeListener() {
             @Override
             public void onLayoutChange(View v, int left, int top, int right, int bottom,
                     int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                mPageHeight = mPreviewPager.getHeight() - mPreviewPager.getPaddingTop() -
+                mCardHeight = mPreviewPager.getHeight() - mPreviewPager.getPaddingTop() -
                         res.getDimensionPixelSize(R.dimen.indicator_container_height);
-                mPageWidth = (int) (mPageHeight / mScreenAspectRatio);
-                mPreviewPager.forceCardWidth(mPageWidth);
+                mCardWidth = (int) (mCardHeight / mScreenAspectRatio);
                 view.removeOnLayoutChangeListener(this);
+                loadWallpaperBackground();
             }
         });
         return view;
     }
 
+    private void loadWallpaperBackground() {
+        if (mHomeWallpaper != null && mCardHeight > 0 && mCardWidth > 0) {
+            mHomeWallpaper.getThumbAsset(getContext()).decodeBitmap(mCardWidth,
+                    mCardHeight,
+                    bitmap -> {
+                        mCardBackground =
+                                new BitmapDrawable(getResources(), bitmap);
+                        if (mAdapter != null) {
+                            mAdapter.onWallpaperInfoLoaded();
+                        }
+                    });
+        }
+    }
+
     private void createAdapter() {
         mAdapter = new GridPreviewAdapter(mSelectedOption);
         mPreviewPager.setAdapter(mAdapter);
@@ -181,18 +195,16 @@
         public void bindPreviewContent() {
             Resources resources = card.getResources();
             bindWallpaperIfAvailable();
-            mPreviewAsset.loadDrawable(mActivity, mPreview,
-                    resources.getColor(android.R.color.transparent, null));
+            mPreviewAsset.loadDrawableWithTransition(mActivity,
+                    mPreview /* imageView */,
+                    PREVIEW_FADE_DURATION_MS /* duration */,
+                    null /* drawableLoadedListener */,
+                    resources.getColor(android.R.color.transparent, null) /* placeHolderColorJ */);
         }
 
         void bindWallpaperIfAvailable() {
-            if (card != null && mIsWallpaperInfoReady && mHomeWallpaper != null) {
-                mHomeWallpaper.getThumbAsset(card.getContext()).decodeBitmap(mPageWidth,
-                        mPageHeight,
-                        bitmap -> {
-                            mPreview.setBackground(
-                                    new BitmapDrawable(card.getResources(), bitmap));
-                        });
+            if (card != null && mCardBackground != null) {
+                mPreview.setBackground(mCardBackground);
             }
         }
     }
diff --git a/src/com/android/customization/widget/PreviewPager.java b/src/com/android/customization/widget/PreviewPager.java
index e8ae012..7146d6b 100644
--- a/src/com/android/customization/widget/PreviewPager.java
+++ b/src/com/android/customization/widget/PreviewPager.java
@@ -17,8 +17,10 @@
 
 import android.content.Context;
 import android.content.res.Resources;
+import android.content.res.TypedArray;
 import android.database.DataSetObserver;
 import android.util.AttributeSet;
+import android.util.DisplayMetrics;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -39,14 +41,19 @@
  */
 public class PreviewPager extends LinearLayout {
 
+    private static final int STYLE_PEEKING = 0;
+    private static final int STYLE_ASPECT_RATIO = 1;
+
     private final ViewPager mViewPager;
     private final PageIndicator mPageIndicator;
     private final View mPreviousArrow;
     private final View mNextArrow;
     private final ViewPager.OnPageChangeListener mPageListener;
+    private int mPageStyle;
 
     private PagerAdapter mAdapter;
     private ViewPager.OnPageChangeListener mExternalPageListener;
+    private float mScreenAspectRatio;
 
     public PreviewPager(Context context) {
         this(context, null);
@@ -60,14 +67,30 @@
         super(context, attrs, defStyleAttr);
         LayoutInflater.from(context).inflate(R.layout.preview_pager, this);
         Resources res = context.getResources();
+        TypedArray a = context.obtainStyledAttributes(attrs,
+                R.styleable.PreviewPager, defStyleAttr, 0);
+
+        mPageStyle = a.getInteger(R.styleable.PreviewPager_card_style, STYLE_PEEKING);
 
         mViewPager = findViewById(R.id.preview_viewpager);
         mViewPager.setPageMargin(res.getDimensionPixelOffset(R.dimen.preview_page_gap));
         mViewPager.setClipToPadding(false);
-        mViewPager.setPadding(res.getDimensionPixelOffset(R.dimen.preview_page_horizontal_margin),
-                res.getDimensionPixelOffset(R.dimen.preview_page_top_margin),
-                res.getDimensionPixelOffset(R.dimen.preview_page_horizontal_margin),
-                res.getDimensionPixelOffset(R.dimen.preview_page_bottom_margin));
+        if (mPageStyle == STYLE_PEEKING) {
+            mViewPager.setPadding(
+                    res.getDimensionPixelOffset(R.dimen.preview_page_horizontal_margin),
+                    res.getDimensionPixelOffset(R.dimen.preview_page_top_margin),
+                    res.getDimensionPixelOffset(R.dimen.preview_page_horizontal_margin),
+                    res.getDimensionPixelOffset(R.dimen.preview_page_bottom_margin));
+        } else if (mPageStyle == STYLE_ASPECT_RATIO) {
+            DisplayMetrics dm = res.getDisplayMetrics();
+            mScreenAspectRatio = (float) dm.heightPixels / dm.widthPixels;
+            mViewPager.setPadding(
+                    0,
+                    res.getDimensionPixelOffset(R.dimen.preview_page_top_margin),
+                    0,
+                    res.getDimensionPixelOffset(R.dimen.preview_page_bottom_margin));
+
+        }
         mPageIndicator = findViewById(R.id.page_indicator);
         mPreviousArrow = findViewById(R.id.arrow_previous);
         mPreviousArrow.setOnClickListener(v -> {
@@ -83,6 +106,27 @@
         mViewPager.addOnPageChangeListener(mPageListener);
     }
 
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        if (mPageStyle == STYLE_ASPECT_RATIO && mViewPager.getPaddingStart() == 0) {
+            int availableWidth = MeasureSpec.getSize(widthMeasureSpec);
+            int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
+            int indicatorHeight = ((View) mPageIndicator.getParent()).getLayoutParams().height;
+            int pagerHeight = availableHeight - indicatorHeight;
+            if (availableWidth > 0) {
+                int absoluteCardWidth = (int) ((pagerHeight - mViewPager.getPaddingBottom()
+                        - mViewPager.getPaddingTop())/ mScreenAspectRatio);
+                int hPadding = (availableWidth / 2) - (absoluteCardWidth / 2);
+                mViewPager.setPaddingRelative(
+                        hPadding,
+                        mViewPager.getPaddingTop(),
+                        hPadding,
+                        mViewPager.getPaddingBottom());
+            }
+        }
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+    }
+
     public void forceCardWidth(int widthPixels) {
         mViewPager.addOnLayoutChangeListener(new OnLayoutChangeListener() {
             @Override
