Index: chrome/android/java/src/org/chromium/chrome/browser/firstrun/ImageCarousel.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ImageCarousel.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ImageCarousel.java |
index 1edd5122b547a8966c7163babb5dd140aa1e1810..df5a61f7a456b7fccc045f36258de5f03fb01d21 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ImageCarousel.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ImageCarousel.java |
@@ -82,6 +82,9 @@ public class ImageCarousel extends FrameLayout implements GestureDetector.OnGest |
private static final int SCROLL_ANIMATION_DURATION_MS = 200; |
private static final int ACCOUNT_SIGNED_IN_ANIMATION_DURATION_MS = 200; |
+ private static final float MINIMUM_POSITION_TWO_IMAGES = -0.1f; |
+ private static final float MAXIMUM_POSITION_TWO_IMAGES = 1.1f; |
+ |
/** |
* Number of ImageViews used in ImageCarousel. |
*/ |
@@ -177,6 +180,10 @@ public class ImageCarousel extends FrameLayout implements GestureDetector.OnGest |
if (mScrollAnimator != null) mScrollAnimator.cancel(); |
position = Math.round(position); |
+ if (mImages != null && mImages.length == 2) { |
+ if (position < 0) position = 0; |
+ if (position > 1) position = 1; |
+ } |
mScrollAnimator = ObjectAnimator.ofFloat(this, POSITION_PROPERTY, mPosition, position); |
mScrollAnimator.setDuration(SCROLL_ANIMATION_DURATION_MS); |
if (decelerate) mScrollAnimator.setInterpolator(new DecelerateInterpolator()); |
@@ -368,15 +375,25 @@ public class ImageCarousel extends FrameLayout implements GestureDetector.OnGest |
} |
private void updateBitmap(int i) { |
- if (mImages.length == 1 && i < 3) return; |
- ImageView image = mViews[getChildDrawingOrder(VIEW_COUNT, i)]; |
+ int drawingOrder = getChildDrawingOrder(VIEW_COUNT, i); |
+ // Only draw one top bitmap for one image case. |
+ if (mImages.length == 1 && drawingOrder > 0) return; |
+ // Only draw two top bitmaps for two images case. |
+ if (mImages.length == 2 && drawingOrder > 1) return; |
+ ImageView image = mViews[drawingOrder]; |
image.setImageBitmap(mImages[ |
(mImages.length + Math.round(mPosition) + BITMAP_OFFSETS[i]) % mImages.length]); |
} |
private void setPosition(float position) { |
if (mImages != null) { |
- mPosition = ((position % mImages.length) + mImages.length) % mImages.length; |
+ if (mImages.length == 2) { |
+ position = Math.max(MINIMUM_POSITION_TWO_IMAGES, position); |
+ position = Math.min(MAXIMUM_POSITION_TWO_IMAGES, position); |
+ mPosition = position; |
+ } else { |
+ mPosition = ((position % mImages.length) + mImages.length) % mImages.length; |
+ } |
} |
int adjustedPosition = getCenterPosition(); |