diff options
author | Adam Cohen <adamcohen@google.com> | 2011-07-03 19:25:21 -0700 |
---|---|---|
committer | Adam Cohen <adamcohen@google.com> | 2011-07-03 19:28:04 -0700 |
commit | 69ce2e5beaa1a57c7b8fa14a2d6ff0b3abeb93c0 (patch) | |
tree | 6d6a67e7076a47d9c500344a352dda749fb656ef /src/com/android/launcher2/FolderIcon.java | |
parent | c9c56f4f717e84ca9f740d4bd3de16260c47625b (diff) | |
download | android_packages_apps_Trebuchet-69ce2e5beaa1a57c7b8fa14a2d6ff0b3abeb93c0.tar.gz android_packages_apps_Trebuchet-69ce2e5beaa1a57c7b8fa14a2d6ff0b3abeb93c0.tar.bz2 android_packages_apps_Trebuchet-69ce2e5beaa1a57c7b8fa14a2d6ff0b3abeb93c0.zip |
Cleaning up Folder accept animation drawing
-> Moved from Workspace to CellLayout, which fixes a bunch
of bugs with transforms (springloaded mode and page scrolling)
Change-Id: I92510be817f46bd29b8a10aac5512dc1ead87180
Diffstat (limited to 'src/com/android/launcher2/FolderIcon.java')
-rw-r--r-- | src/com/android/launcher2/FolderIcon.java | 68 |
1 files changed, 32 insertions, 36 deletions
diff --git a/src/com/android/launcher2/FolderIcon.java b/src/com/android/launcher2/FolderIcon.java index aff8761fd..010271f3e 100644 --- a/src/com/android/launcher2/FolderIcon.java +++ b/src/com/android/launcher2/FolderIcon.java @@ -56,10 +56,10 @@ public class FolderIcon extends LinearLayout implements FolderListener { private static final int CONSUMPTION_ANIMATION_DURATION = 100; // The degree to which the inner ring grows when accepting drop - private static final float INNER_RING_GROWTH_FACTOR = 0.1f; + private static final float INNER_RING_GROWTH_FACTOR = 0.15f; // The degree to which the outer ring is scaled in its natural state - private static final float OUTER_RING_GROWTH_FACTOR = 0.4f; + private static final float OUTER_RING_GROWTH_FACTOR = 0.3f; // The amount of vertical spread between items in the stack [0...1] private static final float PERSPECTIVE_SHIFT_FACTOR = 0.24f; @@ -112,18 +112,19 @@ public class FolderIcon extends LinearLayout implements FolderListener { folder.bind(folderInfo); icon.mFolder = folder; icon.mFolderRingAnimator = new FolderRingAnimator(launcher, icon); + folderInfo.addListener(icon); return icon; } public static class FolderRingAnimator { - public int mFolderLocX; - public int mFolderLocY; + public int mCellX; + public int mCellY; + private CellLayout mCellLayout; public float mOuterRingSize; public float mInnerRingSize; public FolderIcon mFolderIcon = null; - private Launcher mLauncher; public Drawable mOuterRingDrawable = null; public Drawable mInnerRingDrawable = null; public static Drawable sSharedOuterRingDrawable = null; @@ -135,7 +136,6 @@ public class FolderIcon extends LinearLayout implements FolderListener { private ValueAnimator mNeutralAnimator; public FolderRingAnimator(Launcher launcher, FolderIcon folderIcon) { - mLauncher = launcher; mFolderIcon = folderIcon; Resources res = launcher.getResources(); mOuterRingDrawable = res.getDrawable(R.drawable.portal_ring_outer_holo); @@ -153,12 +153,6 @@ public class FolderIcon extends LinearLayout implements FolderListener { } } - // Location is expressed in window coordinates - public void setLocation(int x, int y) { - mFolderLocX = x; - mFolderLocY = y; - } - public void animateToAcceptState() { if (mNeutralAnimator != null) { mNeutralAnimator.cancel(); @@ -170,9 +164,8 @@ public class FolderIcon extends LinearLayout implements FolderListener { final float percent = (Float) animation.getAnimatedValue(); mOuterRingSize = (1 + percent * OUTER_RING_GROWTH_FACTOR) * sPreviewSize; mInnerRingSize = (1 + percent * INNER_RING_GROWTH_FACTOR) * sPreviewSize; - mLauncher.getWorkspace().invalidate(); - if (mFolderIcon != null) { - mFolderIcon.invalidate(); + if (mCellLayout != null) { + mCellLayout.invalidate(); } } }); @@ -198,28 +191,39 @@ public class FolderIcon extends LinearLayout implements FolderListener { final float percent = (Float) animation.getAnimatedValue(); mOuterRingSize = (1 + (1 - percent) * OUTER_RING_GROWTH_FACTOR) * sPreviewSize; mInnerRingSize = (1 + (1 - percent) * INNER_RING_GROWTH_FACTOR) * sPreviewSize; - mLauncher.getWorkspace().invalidate(); - if (mFolderIcon != null) { - mFolderIcon.invalidate(); + if (mCellLayout != null) { + mCellLayout.invalidate(); } } }); mNeutralAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { + if (mCellLayout != null) { + mCellLayout.hideFolderAccept(FolderRingAnimator.this); + } if (mFolderIcon != null) { mFolderIcon.mPreviewBackground.setVisibility(VISIBLE); } - mLauncher.getWorkspace().hideFolderAccept(FolderRingAnimator.this); } }); mNeutralAnimator.start(); } // Location is expressed in window coordinates - public void getLocation(int[] loc) { - loc[0] = mFolderLocX; - loc[1] = mFolderLocY; + public void getCell(int[] loc) { + loc[0] = mCellX; + loc[1] = mCellY; + } + + // Location is expressed in window coordinates + public void setCell(int x, int y) { + mCellX = x; + mCellY = y; + } + + public void setCellLayout(CellLayout layout) { + mCellLayout = layout; } public float getOuterRingSize() { @@ -253,22 +257,14 @@ public class FolderIcon extends LinearLayout implements FolderListener { mOriginalHeight = lp.height; } - private void determineFolderLocationInWorkspace() { - int tvLocation[] = new int[2]; - int wsLocation[] = new int[2]; - getLocationInWindow(tvLocation); - mLauncher.getWorkspace().getLocationInWindow(wsLocation); - - int x = tvLocation[0] - wsLocation[0] + getMeasuredWidth() / 2; - int y = tvLocation[1] - wsLocation[1] + FolderRingAnimator.sPreviewSize / 2; - mFolderRingAnimator.setLocation(x, y); - } - public void onDragEnter(Object dragInfo) { if (!willAcceptItem((ItemInfo) dragInfo)) return; - determineFolderLocationInWorkspace(); - mLauncher.getWorkspace().showFolderAccept(mFolderRingAnimator); + CellLayout.LayoutParams lp = (CellLayout.LayoutParams) getLayoutParams(); + CellLayout layout = (CellLayout) getParent().getParent(); + mFolderRingAnimator.setCell(lp.cellX, lp.cellY); + mFolderRingAnimator.setCellLayout(layout); mFolderRingAnimator.animateToAcceptState(); + layout.showFolderAccept(mFolderRingAnimator); } public void onDragOver(Object dragInfo) { @@ -341,7 +337,7 @@ public class FolderIcon extends LinearLayout implements FolderListener { ArrayList<View> items = mFolder.getItemsInReadingOrder(false); int xShift = (mOriginalWidth - 2 * halfAvailableSpace) / 2; - int yShift = previewPadding; + int yShift = previewPadding + getPaddingTop(); canvas.translate(xShift, yShift); int nItemsInPreview = Math.min(items.size(), NUM_ITEMS_IN_PREVIEW); for (int i = nItemsInPreview - 1; i >= 0; i--) { |