summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/FolderIcon.java
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2011-07-03 19:25:21 -0700
committerAdam Cohen <adamcohen@google.com>2011-07-03 19:28:04 -0700
commit69ce2e5beaa1a57c7b8fa14a2d6ff0b3abeb93c0 (patch)
tree6d6a67e7076a47d9c500344a352dda749fb656ef /src/com/android/launcher2/FolderIcon.java
parentc9c56f4f717e84ca9f740d4bd3de16260c47625b (diff)
downloadandroid_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.java68
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--) {