From f9048cd09b27ab25d9f42c95a79b341c102728c8 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Sat, 27 Oct 2012 16:36:10 -0700 Subject: [PATCH] Polish to 3d carousel and standard pager -> updated assets -> Always showing outlines as per new mock -> Enabling layers on content during fades (still need to sort out layers for frames) -> Added carousel overscroll as per discussion with danship -> Fading side pages in carousel -> other small polish Change-Id: If88686768c621a65b175a74c07cb55a69321fd97 --- .../res/drawable-hdpi/security_frame.9.png | Bin 6384 -> 0 bytes .../res/res/drawable-hdpi/security_handle.png | Bin 516 -> 0 bytes .../res/drawable-mdpi/security_frame.9.png | Bin 6384 -> 0 bytes .../res/res/drawable-mdpi/security_handle.png | Bin 516 -> 0 bytes .../res/drawable-xhdpi/security_frame.9.png | Bin 6384 -> 0 bytes .../res/drawable-xhdpi/security_handle.png | Bin 516 -> 0 bytes core/res/res/values/symbols.xml | 2 +- .../impl/keyguard/KeyguardWidgetCarousel.java | 60 +++++-- .../impl/keyguard/KeyguardWidgetFrame.java | 53 ++++-- .../impl/keyguard/KeyguardWidgetPager.java | 167 ++++++++++-------- .../policy/impl/keyguard/PagedView.java | 13 +- 11 files changed, 181 insertions(+), 114 deletions(-) delete mode 100644 core/res/res/drawable-hdpi/security_frame.9.png delete mode 100644 core/res/res/drawable-hdpi/security_handle.png delete mode 100644 core/res/res/drawable-mdpi/security_frame.9.png delete mode 100644 core/res/res/drawable-mdpi/security_handle.png delete mode 100644 core/res/res/drawable-xhdpi/security_frame.9.png delete mode 100644 core/res/res/drawable-xhdpi/security_handle.png diff --git a/core/res/res/drawable-hdpi/security_frame.9.png b/core/res/res/drawable-hdpi/security_frame.9.png deleted file mode 100644 index 9eeadc4d118fe87a1b784240557da3bb6882ab29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6384 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 Pjg$a(+Dxxf*D3s8x2v;7 diff --git a/core/res/res/drawable-hdpi/security_handle.png b/core/res/res/drawable-hdpi/security_handle.png deleted file mode 100644 index bd4640f7228ccad0699f425333a58edbd75c92a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 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 Pjg$a(+Dxxf*D3s8x2v;7 diff --git a/core/res/res/drawable-mdpi/security_handle.png b/core/res/res/drawable-mdpi/security_handle.png deleted file mode 100644 index bd4640f7228ccad0699f425333a58edbd75c92a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 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 Pjg$a(+Dxxf*D3s8x2v;7 diff --git a/core/res/res/drawable-xhdpi/security_handle.png b/core/res/res/drawable-xhdpi/security_handle.png deleted file mode 100644 index bd4640f7228ccad0699f425333a58edbd75c92a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlVTXL`g$(N^QrUNO-64!{5;QX|b^2DN42FH~A zq*MjZ+{E~)xnt;k(T95x8$9Gf0iQWh)j_`|N^s-Njq{~Ko)OxeWDz)+uh zU6g@A!GV!M0O%Zanj?S#ERKz4(O_TziDRRgL>L&Vw%mVoCbDey+%)HKHiiT0>u)BT zos^r!$M2=N^||;>o7=_f85p({O!eK(_Tt<1bI;#guw`PnaH+a%ifwKAf^U2;mi}O2 zc+k$b>GiF~sD{2f@(c{JGUdEL8(+lgI!s^3&d|UYwzb{PiHTu>|NdVbFIA<}^WO - + diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetCarousel.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetCarousel.java index 02c32d4d6e327..cf16ef2a715de 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetCarousel.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetCarousel.java @@ -17,12 +17,14 @@ package com.android.internal.policy.impl.keyguard; import android.content.Context; import android.util.AttributeSet; +import android.view.View; import com.android.internal.R; public class KeyguardWidgetCarousel extends KeyguardWidgetPager { private float mAdjacentPagesAngle; + private static float MAX_SCROLL_PROGRESS = 1.3f; private static float CAMERA_DISTANCE = 10000; public KeyguardWidgetCarousel(Context context, AttributeSet attrs) { @@ -39,43 +41,73 @@ public class KeyguardWidgetCarousel extends KeyguardWidgetPager { } protected float getMaxScrollProgress() { - return 1.5f; + return MAX_SCROLL_PROGRESS; + } + + public float getAlphaForPage(int screenCenter, int index) { + View child = getChildAt(index); + if (child == null) return 0f; + + float scrollProgress = getScrollProgress(screenCenter, child, index); + if (!isOverScrollChild(index, scrollProgress)) { + scrollProgress = getBoundedScrollProgress(screenCenter, child, index); + float alpha = 1 - Math.abs(scrollProgress / MAX_SCROLL_PROGRESS); + return alpha; + } else { + return 1f; + } } private void updatePageAlphaValues(int screenCenter) { - boolean isInOverscroll = mOverScrollX < 0 || mOverScrollX > mMaxScrollX; - if (!isInOverscroll) { + if (mChildrenOutlineFadeAnimation != null) { + mChildrenOutlineFadeAnimation.cancel(); + mChildrenOutlineFadeAnimation = null; + } + if (!isReordering(false)) { for (int i = 0; i < getChildCount(); i++) { KeyguardWidgetFrame child = getWidgetPageAt(i); if (child != null) { - float scrollProgress = getScrollProgress(screenCenter, child, i); - if (!isReordering(false)) { - child.setBackgroundAlphaMultiplier( - backgroundAlphaInterpolator(Math.abs(scrollProgress))); - } else { - child.setBackgroundAlphaMultiplier(1f); - } + float alpha = getAlphaForPage(screenCenter, i); + child.setBackgroundAlpha(alpha); + child.setContentAlpha(alpha); } } } + } @Override protected void screenScrolled(int screenCenter) { + mScreenCenter = screenCenter; updatePageAlphaValues(screenCenter); for (int i = 0; i < getChildCount(); i++) { KeyguardWidgetFrame v = getWidgetPageAt(i); - if (v == mDragView) continue; - if (v != null) { - float scrollProgress = getScrollProgress(screenCenter, v, i); + float scrollProgress = getScrollProgress(screenCenter, v, i); + if (v == mDragView || v == null) continue; + v.setCameraDistance(CAMERA_DISTANCE); + + if (isOverScrollChild(i, scrollProgress)) { + v.setRotationY(- OVERSCROLL_MAX_ROTATION * scrollProgress); + v.setOverScrollAmount(Math.abs(scrollProgress), scrollProgress < 0); + } else { + scrollProgress = getBoundedScrollProgress(screenCenter, v, i); int width = v.getMeasuredWidth(); float pivotX = (width / 2f) + scrollProgress * (width / 2f); float pivotY = v.getMeasuredHeight() / 2; float rotationY = - mAdjacentPagesAngle * scrollProgress; - v.setCameraDistance(CAMERA_DISTANCE); v.setPivotX(pivotX); v.setPivotY(pivotY); v.setRotationY(rotationY); + v.setOverScrollAmount(0f, false); + } + + float alpha = v.getAlpha(); + // If the view has 0 alpha, we set it to be invisible so as to prevent + // it from accepting touches + if (alpha == 0) { + v.setVisibility(INVISIBLE); + } else if (v.getVisibility() != VISIBLE) { + v.setVisibility(VISIBLE); } } } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java index 9e1189c3bf26d..20e86ad5475d2 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java @@ -51,6 +51,7 @@ public class KeyguardWidgetFrame extends FrameLayout { private CheckLongPressHelper mLongPressHelper; private float mBackgroundAlpha; + private float mContentAlpha; private float mBackgroundAlphaMultiplier = 1.0f; private Drawable mBackgroundDrawable; private Rect mBackgroundRect = new Rect(); @@ -74,7 +75,7 @@ public class KeyguardWidgetFrame extends FrameLayout { int padding = (int) (res.getDisplayMetrics().density * 8); setPadding(padding, padding, padding, padding); - mBackgroundDrawable = res.getDrawable(R.drawable.security_frame); + mBackgroundDrawable = res.getDrawable(R.drawable.kg_bouncer_bg_white); mGradientColor = res.getColor(com.android.internal.R.color.kg_widget_pager_gradient); mGradientPaint.setXfermode(sAddBlendMode); } @@ -133,6 +134,23 @@ public class KeyguardWidgetFrame extends FrameLayout { mLongPressHelper.cancelLongPress(); } + + private void drawGradientOverlay(Canvas c) { + mGradientPaint.setShader(mForegroundGradient); + mGradientPaint.setAlpha(mForegroundAlpha); + c.drawRect(mForegroundRect, mGradientPaint); + } + + protected void drawBg(Canvas canvas) { + if (mBackgroundAlpha > 0.0f) { + Drawable bg = mBackgroundDrawable; + + bg.setAlpha((int) (mBackgroundAlpha * mBackgroundAlphaMultiplier * 255)); + bg.setBounds(mBackgroundRect); + bg.draw(canvas); + } + } + @Override protected void dispatchDraw(Canvas canvas) { drawBg(canvas); @@ -164,6 +182,14 @@ public class KeyguardWidgetFrame extends FrameLayout { } } + public void enableHardwareLayers() { + setLayerType(LAYER_TYPE_HARDWARE, null); + } + + public void disableHardwareLayers() { + setLayerType(LAYER_TYPE_NONE, null); + } + public View getContent() { return getChildAt(0); } @@ -177,28 +203,12 @@ public class KeyguardWidgetFrame extends FrameLayout { } } - private void drawGradientOverlay(Canvas c) { - mGradientPaint.setShader(mForegroundGradient); - mGradientPaint.setAlpha(mForegroundAlpha); - c.drawRect(mForegroundRect, mGradientPaint); - } - - protected void drawBg(Canvas canvas) { - if (mBackgroundAlpha > 0.0f) { - Drawable bg = mBackgroundDrawable; - - bg.setAlpha((int) (mBackgroundAlpha * mBackgroundAlphaMultiplier * 255)); - bg.setBounds(mBackgroundRect); - bg.draw(canvas); - } - } - public float getBackgroundAlpha() { return mBackgroundAlpha; } public void setBackgroundAlphaMultiplier(float multiplier) { - if (mBackgroundAlphaMultiplier != multiplier) { + if (Float.compare(mBackgroundAlphaMultiplier, multiplier) != 0) { mBackgroundAlphaMultiplier = multiplier; invalidate(); } @@ -209,13 +219,18 @@ public class KeyguardWidgetFrame extends FrameLayout { } public void setBackgroundAlpha(float alpha) { - if (mBackgroundAlpha != alpha) { + if (Float.compare(mBackgroundAlpha, alpha) != 0) { mBackgroundAlpha = alpha; invalidate(); } } + public float getContentAlpha() { + return mContentAlpha; + } + public void setContentAlpha(float alpha) { + mContentAlpha = alpha; View content = getContent(); if (content != null) { content.setAlpha(alpha); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java index 63e7fddd84639..772c7632557ec 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java @@ -15,6 +15,9 @@ */ package com.android.internal.policy.impl.keyguard; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.TimeInterpolator; @@ -27,33 +30,32 @@ import android.view.MotionEvent; import android.view.View; import android.view.View.OnLongClickListener; import android.view.ViewGroup; -import android.view.animation.AccelerateInterpolator; -import android.view.animation.DecelerateInterpolator; import android.widget.FrameLayout; import com.android.internal.R; import com.android.internal.widget.LockPatternUtils; +import java.util.ArrayList; + public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwitchListener, OnLongClickListener { ZInterpolator mZInterpolator = new ZInterpolator(0.5f); private static float CAMERA_DISTANCE = 10000; - private static float TRANSITION_MAX_ROTATION = 30; + protected static float OVERSCROLL_MAX_ROTATION = 30; private static final boolean PERFORM_OVERSCROLL_ROTATION = true; private KeyguardViewStateManager mViewStateManager; private LockPatternUtils mLockPatternUtils; // Related to the fading in / out background outlines - private static final int CHILDREN_OUTLINE_FADE_OUT_DELAY = 0; private static final int CHILDREN_OUTLINE_FADE_OUT_DURATION = 375; - private static final int CHILDREN_OUTLINE_FADE_IN_DURATION = 100; - private ObjectAnimator mChildrenOutlineFadeInAnimation; - private ObjectAnimator mChildrenOutlineFadeOutAnimation; + private static final int CHILDREN_OUTLINE_FADE_IN_DURATION = 75; + protected AnimatorSet mChildrenOutlineFadeAnimation; private float mChildrenOutlineAlpha = 0; private float mSidePagesAlpha = 1f; + protected int mScreenCenter; private static final long CUSTOM_WIDGET_USER_ACTIVITY_TIMEOUT = 30000; @@ -253,13 +255,7 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit @Override protected void onPageBeginMoving() { - // Enable hardware layers while pages are moving - // TODO: We should only do this for the two views that are actually moving - int children = getChildCount(); - for (int i = 0; i < children; i++) { - getWidgetPageAt(i).enableHardwareLayersForContent(); - } - + enablePageLayers(); if (mViewStateManager != null) { mViewStateManager.onPageBeginMoving(); } @@ -268,18 +264,26 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit @Override protected void onPageEndMoving() { - // Disable hardware layers while pages are moving - int children = getChildCount(); - for (int i = 0; i < children; i++) { - getWidgetPageAt(i).disableHardwareLayersForContent(); - } - if (mViewStateManager != null) { mViewStateManager.onPageEndMoving(); } hideOutlinesAndSidePages(); } + private void enablePageLayers() { + int children = getChildCount(); + for (int i = 0; i < children; i++) { + getWidgetPageAt(i).enableHardwareLayersForContent(); + } + } + + private void disablePageLayers() { + int children = getChildCount(); + for (int i = 0; i < children; i++) { + getWidgetPageAt(i).disableHardwareLayersForContent(); + } + } + /* * This interpolator emulates the rate at which the perceived scale of an object changes * as its distance from a camera increases. When this interpolator is applied to a scale @@ -325,25 +329,21 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit } private void updatePageAlphaValues(int screenCenter) { + } + + public float getAlphaForPage(int screenCenter, int index) { + return 1f; + } + + protected boolean isOverScrollChild(int index, float scrollProgress) { boolean isInOverscroll = mOverScrollX < 0 || mOverScrollX > mMaxScrollX; - if (!isInOverscroll) { - for (int i = 0; i < getChildCount(); i++) { - KeyguardWidgetFrame child = getWidgetPageAt(i); - if (child != null) { - float scrollProgress = getScrollProgress(screenCenter, child, i); - if (!isReordering(false)) { - child.setBackgroundAlphaMultiplier( - backgroundAlphaInterpolator(Math.abs(scrollProgress))); - } else { - child.setBackgroundAlphaMultiplier(1f); - } - } - } - } + return (isInOverscroll && (index == 0 && scrollProgress < 0 || + index == getChildCount() - 1 && scrollProgress > 0)); } @Override protected void screenScrolled(int screenCenter) { + mScreenCenter = screenCenter; updatePageAlphaValues(screenCenter); for (int i = 0; i < getChildCount(); i++) { KeyguardWidgetFrame v = getWidgetPageAt(i); @@ -351,30 +351,17 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit if (v != null) { float scrollProgress = getScrollProgress(screenCenter, v, i); - float alpha = 1.0f; - v.setCameraDistance(mDensity * CAMERA_DISTANCE); - if (PERFORM_OVERSCROLL_ROTATION) { - if (i == 0 && scrollProgress < 0) { - // Over scroll to the left - v.setRotationY(-TRANSITION_MAX_ROTATION * scrollProgress); - v.setOverScrollAmount(Math.abs(scrollProgress), true); - alpha = 1.0f; - // On the first page, we don't want the page to have any lateral motion - } else if (i == getChildCount() - 1 && scrollProgress > 0) { - // Over scroll to the right - v.setRotationY(-TRANSITION_MAX_ROTATION * scrollProgress); - alpha = 1.0f; - v.setOverScrollAmount(Math.abs(scrollProgress), false); - // On the last page, we don't want the page to have any lateral motion. - } else { - v.setRotationY(0f); - v.setOverScrollAmount(0, false); - } + if (isOverScrollChild(i, scrollProgress) && PERFORM_OVERSCROLL_ROTATION) { + v.setRotationY(- OVERSCROLL_MAX_ROTATION * scrollProgress); + v.setOverScrollAmount(Math.abs(scrollProgress), scrollProgress < 0); + } else { + v.setRotationY(0f); + v.setOverScrollAmount(0, false); } - v.setAlpha(alpha); + float alpha = v.getAlpha(); // If the view has 0 alpha, we set it to be invisible so as to prevent // it from accepting touches if (alpha == 0) { @@ -385,6 +372,7 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit } } } + @Override void boundByReorderablePages(boolean isReordering, int[] range) { if (isReordering) { @@ -418,7 +406,6 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit @Override protected void onStartReordering() { super.onStartReordering(); - setChildrenOutlineMultiplier(1.0f); showOutlinesAndSidePages(); } @@ -429,43 +416,67 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit } void showOutlinesAndSidePages() { - if (mChildrenOutlineFadeOutAnimation != null) mChildrenOutlineFadeOutAnimation.cancel(); - if (mChildrenOutlineFadeInAnimation != null) mChildrenOutlineFadeInAnimation.cancel(); + animateOutlinesAndSidePages(true); + } - PropertyValuesHolder outlinesAlpha = - PropertyValuesHolder.ofFloat("childrenOutlineAlpha", 1.0f); - PropertyValuesHolder sidePagesAlpha = PropertyValuesHolder.ofFloat("sidePagesAlpha", 1.0f); - mChildrenOutlineFadeInAnimation = - ObjectAnimator.ofPropertyValuesHolder(this, outlinesAlpha, sidePagesAlpha); - - mChildrenOutlineFadeInAnimation.setDuration(CHILDREN_OUTLINE_FADE_IN_DURATION); - mChildrenOutlineFadeInAnimation.start(); + void hideOutlinesAndSidePages() { + animateOutlinesAndSidePages(false); } public void showInitialPageHints() { // We start with everything showing setChildrenOutlineAlpha(1.0f); setSidePagesAlpha(1.0f); - setChildrenOutlineMultiplier(1.0f); int currPage = getCurrentPage(); KeyguardWidgetFrame frame = getWidgetPageAt(currPage); - frame.setBackgroundAlphaMultiplier(0f); + frame.setBackgroundAlpha(0f); } - void hideOutlinesAndSidePages() { - if (mChildrenOutlineFadeInAnimation != null) mChildrenOutlineFadeInAnimation.cancel(); - if (mChildrenOutlineFadeOutAnimation != null) mChildrenOutlineFadeOutAnimation.cancel(); + void animateOutlinesAndSidePages(final boolean show) { + if (mChildrenOutlineFadeAnimation != null) { + mChildrenOutlineFadeAnimation.cancel(); + mChildrenOutlineFadeAnimation = null; + } - PropertyValuesHolder outlinesAlpha = - PropertyValuesHolder.ofFloat("childrenOutlineAlpha", 0f); - PropertyValuesHolder sidePagesAlpha = PropertyValuesHolder.ofFloat("sidePagesAlpha", 0f); - mChildrenOutlineFadeOutAnimation = - ObjectAnimator.ofPropertyValuesHolder(this, outlinesAlpha, sidePagesAlpha); + int count = getChildCount(); + PropertyValuesHolder alpha; + PropertyValuesHolder outlineAlpha; + ArrayList anims = new ArrayList(); - mChildrenOutlineFadeOutAnimation.setDuration(CHILDREN_OUTLINE_FADE_OUT_DURATION); - mChildrenOutlineFadeOutAnimation.setStartDelay(CHILDREN_OUTLINE_FADE_OUT_DELAY); - mChildrenOutlineFadeOutAnimation.start(); + int curPage = getNextPage(); + for (int i = 0; i < count; i++) { + float finalContentAlpha; + if (show) { + finalContentAlpha = getAlphaForPage(mScreenCenter, i); + } else if (!show && i == curPage) { + finalContentAlpha = 1f; + } else { + finalContentAlpha = 0f; + } + float finalOutlineAlpha = show ? getAlphaForPage(mScreenCenter, i) : 0f; + KeyguardWidgetFrame child = getWidgetPageAt(i); + alpha = PropertyValuesHolder.ofFloat("contentAlpha", finalContentAlpha); + outlineAlpha = PropertyValuesHolder.ofFloat("backgroundAlpha",finalOutlineAlpha); + ObjectAnimator a = ObjectAnimator.ofPropertyValuesHolder(child, alpha, outlineAlpha); + anims.add(a); + } + + int duration = show ? CHILDREN_OUTLINE_FADE_IN_DURATION : + CHILDREN_OUTLINE_FADE_OUT_DURATION; + mChildrenOutlineFadeAnimation = new AnimatorSet(); + mChildrenOutlineFadeAnimation.playTogether(anims); + + mChildrenOutlineFadeAnimation.setDuration(duration); + mChildrenOutlineFadeAnimation.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + if (!show) { + disablePageLayers(); + } + } + }); + mChildrenOutlineFadeAnimation.start(); } public void setChildrenOutlineAlpha(float alpha) { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java b/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java index 3562071a2a1c4..25ce6d0f1dba3 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java @@ -201,8 +201,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc // We use the min scale to determine how much to expand the actually PagedView measured // dimensions such that when we are zoomed out, the view is not clipped private int REORDERING_DROP_REPOSITION_DURATION = 200; - private int REORDERING_REORDER_REPOSITION_DURATION = 350; - private int REORDERING_ZOOM_IN_OUT_DURATION = 250; + protected int REORDERING_REORDER_REPOSITION_DURATION = 350; + protected int REORDERING_ZOOM_IN_OUT_DURATION = 250; private int REORDERING_SIDE_PAGE_HOVER_TIMEOUT = 500; private float REORDERING_SIDE_PAGE_BUFFER_PERCENTAGE = 0.1f; private float mMinScale = 1f; @@ -1162,6 +1162,15 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc return 1.0f; } + protected float getBoundedScrollProgress(int screenCenter, View v, int page) { + final int halfScreenSize = getViewportWidth() / 2; + + screenCenter = Math.min(mScrollX + halfScreenSize, screenCenter); + screenCenter = Math.max(halfScreenSize, screenCenter); + + return getScrollProgress(screenCenter, v, page); + } + protected float getScrollProgress(int screenCenter, View v, int page) { final int halfScreenSize = getViewportWidth() / 2;