diff options
Diffstat (limited to 'src/com/android/launcher3/folder/FolderAnimationManager.java')
-rw-r--r-- | src/com/android/launcher3/folder/FolderAnimationManager.java | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/com/android/launcher3/folder/FolderAnimationManager.java b/src/com/android/launcher3/folder/FolderAnimationManager.java index 7e8d0c7cd..69705d594 100644 --- a/src/com/android/launcher3/folder/FolderAnimationManager.java +++ b/src/com/android/launcher3/folder/FolderAnimationManager.java @@ -119,13 +119,14 @@ public class FolderAnimationManager { public AnimatorSet getAnimator() { final DragLayer.LayoutParams lp = (DragLayer.LayoutParams) mFolder.getLayoutParams(); FolderIcon.PreviewLayoutRule rule = mFolderIcon.getLayoutRule(); - final List<BubbleTextView> itemsInPreview = mFolderIcon.getItemsToDisplay(); + final List<BubbleTextView> itemsInPreview = mFolderIcon.getPreviewItems(); // Match position of the FolderIcon final Rect folderIconPos = new Rect(); float scaleRelativeToDragLayer = mLauncher.getDragLayer() .getDescendantRectRelativeToSelf(mFolderIcon, folderIconPos); - float initialSize = (mPreviewBackground.getRadius() * 2) * scaleRelativeToDragLayer; + int scaledRadius = mPreviewBackground.getScaledRadius(); + float initialSize = (scaledRadius * 2) * scaleRelativeToDragLayer; // Match size/scale of icons in the preview float previewScale = rule.scaleForItem(0, itemsInPreview.size()); @@ -152,13 +153,9 @@ public class FolderAnimationManager { final int paddingOffsetY = (int) ((mFolder.getPaddingTop() + mContent.getPaddingTop()) * initialScale); - // Background can have a scaled radius in drag and drop mode. - int radiusDiff = mPreviewBackground.getScaledRadius()- mPreviewBackground.getRadius(); - int initialX = folderIconPos.left + mPreviewBackground.getOffsetX() - paddingOffsetX - - previewItemOffsetX + radiusDiff; - int initialY = folderIconPos.top + mPreviewBackground.getOffsetY() - paddingOffsetY - + radiusDiff; + - previewItemOffsetX; + int initialY = folderIconPos.top + mPreviewBackground.getOffsetY() - paddingOffsetY; final float xDistance = initialX - lp.x; final float yDistance = initialY - lp.y; @@ -186,7 +183,7 @@ public class FolderAnimationManager { PropertyResetListener colorResetListener = new PropertyResetListener<>( BubbleTextView.TEXT_ALPHA_PROPERTY, Color.alpha(Themes.getAttrColor(mContext, android.R.attr.textColorSecondary))); - for (BubbleTextView icon : mFolder.getItemsOnCurrentPage()) { + for (BubbleTextView icon : mFolder.getItemsOnPage(mFolder.mContent.getCurrentPage())) { if (mIsOpening) { icon.setTextVisibility(false); } @@ -232,18 +229,28 @@ public class FolderAnimationManager { animator.setInterpolator(mFolderInterpolator); } - addPreviewItemAnimators(a, initialScale / scaleRelativeToDragLayer, previewItemOffsetX); + int radiusDiff = scaledRadius - mPreviewBackground.getRadius(); + addPreviewItemAnimators(a, initialScale / scaleRelativeToDragLayer, + // Background can have a scaled radius in drag and drop mode, so we need to add the + // difference to keep the preview items centered. + previewItemOffsetX + radiusDiff, radiusDiff); return a; } /** - * Animate the items that are displayed in the preview. + * Animate the items on the current page. */ private void addPreviewItemAnimators(AnimatorSet animatorSet, final float folderScale, - int previewItemOffsetX) { + int previewItemOffsetX, int previewItemOffsetY) { FolderIcon.PreviewLayoutRule rule = mFolderIcon.getLayoutRule(); - final List<BubbleTextView> itemsInPreview = mFolderIcon.getItemsToDisplay(); + boolean isOnFirstPage = mFolder.mContent.getCurrentPage() == 0; + final List<BubbleTextView> itemsInPreview = isOnFirstPage + ? mFolderIcon.getPreviewItems() + : mFolderIcon.getPreviewItemsOnPage(mFolder.mContent.getCurrentPage()); final int numItemsInPreview = itemsInPreview.size(); + final int numItemsInFirstPagePreview = isOnFirstPage + ? numItemsInPreview + : FolderIcon.NUM_ITEMS_IN_PREVIEW; TimeInterpolator previewItemInterpolator = getPreviewItemInterpolator(); @@ -256,8 +263,8 @@ public class FolderAnimationManager { btvLp.isLockedToGrid = true; cwc.setupLp(btv); - // Match scale of icons in the preview. - float previewScale = rule.scaleForItem(i, numItemsInPreview); + // Match scale of icons in the preview of the items on the first page. + float previewScale = rule.scaleForItem(i, numItemsInFirstPagePreview); float previewSize = rule.getIconSize() * previewScale; float iconScale = previewSize / itemsInPreview.get(i).getIconSize(); @@ -268,14 +275,14 @@ public class FolderAnimationManager { btv.setScaleY(scale); // Match positions of the icons in the folder with their positions in the preview - rule.computePreviewItemDrawingParams(i, numItemsInPreview, mTmpParams); + rule.computePreviewItemDrawingParams(i, numItemsInFirstPagePreview, mTmpParams); // The PreviewLayoutRule assumes that the icon size takes up the entire width so we // offset by the actual size. int iconOffsetX = (int) ((btvLp.width - btv.getIconSize()) * iconScale) / 2; final int previewPosX = (int) ((mTmpParams.transX - iconOffsetX + previewItemOffsetX) / folderScale); - final int previewPosY = (int) (mTmpParams.transY / folderScale); + final int previewPosY = (int) ((mTmpParams.transY + previewItemOffsetY) / folderScale); final float xDistance = previewPosX - btvLp.x; final float yDistance = previewPosY - btvLp.y; |