Merge "Fix the entry animation for delightful pagination in folders" into tm-qpr-dev am: 1aa91f0f7a
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/20059409 Change-Id: Ic31ef18fb69c57dad45dd8502db896e8aabfffa0 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -153,6 +153,7 @@ public class PageIndicatorDots extends View implements PageIndicator {
|
||||
@Override
|
||||
public void setScroll(int currentScroll, int totalScroll) {
|
||||
if (mNumPages <= 1) {
|
||||
mCurrentScroll = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -296,8 +297,12 @@ public class PageIndicatorDots extends View implements PageIndicator {
|
||||
for (int i = 0; i < mEntryAnimationRadiusFactors.length; i++) {
|
||||
mPaginationPaint.setAlpha(i == mActivePage ? PAGE_INDICATOR_ALPHA : DOT_ALPHA);
|
||||
if (SHOW_DELIGHTFUL_PAGINATION_FOLDER.get()) {
|
||||
canvas.drawCircle(x, y, getRadius(x) * mEntryAnimationRadiusFactors[i],
|
||||
mPaginationPaint);
|
||||
if (i != mActivePage) {
|
||||
canvas.drawCircle(x, y, mDotRadius * mEntryAnimationRadiusFactors[i],
|
||||
mPaginationPaint);
|
||||
} else {
|
||||
drawPageIndicator(canvas, mEntryAnimationRadiusFactors[i]);
|
||||
}
|
||||
} else {
|
||||
canvas.drawCircle(x, y, mDotRadius * mEntryAnimationRadiusFactors[i],
|
||||
mPaginationPaint);
|
||||
@@ -319,26 +324,43 @@ public class PageIndicatorDots extends View implements PageIndicator {
|
||||
// Here we draw the current page indicator
|
||||
mPaginationPaint.setAlpha(PAGE_INDICATOR_ALPHA);
|
||||
if (SHOW_DELIGHTFUL_PAGINATION_FOLDER.get()) {
|
||||
RectF currRect = getActiveRect();
|
||||
|
||||
// Moves the canvas to start at the top left corner of the page indicator
|
||||
canvas.translate(currRect.left, currRect.top);
|
||||
|
||||
int scrollPerPage = getScrollPerPage();
|
||||
// This IF is to avoid division by 0
|
||||
if (scrollPerPage != 0) {
|
||||
int delta = mCurrentScroll % scrollPerPage;
|
||||
canvas.rotate((INDICATOR_ROTATION * delta) / scrollPerPage,
|
||||
mPageIndicatorRadius, mPageIndicatorRadius);
|
||||
}
|
||||
|
||||
mPageIndicatorDrawable.draw(canvas);
|
||||
drawPageIndicator(canvas, 1);
|
||||
} else {
|
||||
canvas.drawRoundRect(getActiveRect(), mDotRadius, mDotRadius, mPaginationPaint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the page indicator, denoting the currently selected page
|
||||
*
|
||||
* @param canvas is used to draw the page indicator and to rotate it as we scroll
|
||||
* @param scale is used to set the scale of our canvas
|
||||
*/
|
||||
private void drawPageIndicator(Canvas canvas, float scale) {
|
||||
RectF currRect = getActiveRect();
|
||||
|
||||
// saves the canvas so we can later restore it to its original scale
|
||||
canvas.save();
|
||||
|
||||
// Moves the canvas to start at the top left corner of the page indicator
|
||||
canvas.translate(currRect.left, currRect.top);
|
||||
|
||||
// Scales the canvas in place to animate the indicator on entry
|
||||
canvas.scale(scale, scale, mPageIndicatorRadius, mPageIndicatorRadius);
|
||||
|
||||
int scrollPerPage = getScrollPerPage();
|
||||
// This IF is to avoid division by 0
|
||||
if (scrollPerPage != 0) {
|
||||
int delta = mCurrentScroll % scrollPerPage;
|
||||
canvas.rotate((INDICATOR_ROTATION * delta) / scrollPerPage,
|
||||
mPageIndicatorRadius, mPageIndicatorRadius);
|
||||
}
|
||||
|
||||
mPageIndicatorDrawable.draw(canvas);
|
||||
canvas.restore();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the radius of the circle based on how close the page indicator is to it
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user