summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/FolderIcon.java
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2011-07-02 18:03:00 -0700
committerAdam Cohen <adamcohen@google.com>2011-07-02 18:42:25 -0700
commit3e8f811f31a2275e778244427271f77f4116c08b (patch)
tree53a8530718c95bee2830ca80863bff60f4d1fbf2 /src/com/android/launcher2/FolderIcon.java
parent04dc2bc6139ff414e49fc423d28edbd5801cdc03 (diff)
downloadandroid_packages_apps_Trebuchet-3e8f811f31a2275e778244427271f77f4116c08b.tar.gz
android_packages_apps_Trebuchet-3e8f811f31a2275e778244427271f77f4116c08b.tar.bz2
android_packages_apps_Trebuchet-3e8f811f31a2275e778244427271f77f4116c08b.zip
Added transitions when dropping items onto Folders, fixed bugs
-> Changed the ordering of the FolderIcon preview to show first items first -> Folder now closes immediately upon drop of an item from folder to workspace Change-Id: I66361b604dc5ef81da2413b7dda53d0c4691377e
Diffstat (limited to 'src/com/android/launcher2/FolderIcon.java')
-rw-r--r--src/com/android/launcher2/FolderIcon.java33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/com/android/launcher2/FolderIcon.java b/src/com/android/launcher2/FolderIcon.java
index bae2fd77c..aff8761fd 100644
--- a/src/com/android/launcher2/FolderIcon.java
+++ b/src/com/android/launcher2/FolderIcon.java
@@ -25,11 +25,14 @@ import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PorterDuff;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -276,17 +279,30 @@ public class FolderIcon extends LinearLayout implements FolderListener {
mFolderRingAnimator.animateToNaturalState();
}
- public void onDrop(Object dragInfo) {
+ public void onDrop(DragObject d) {
ShortcutInfo item;
- if (dragInfo instanceof ApplicationInfo) {
+ if (d.dragInfo instanceof ApplicationInfo) {
// Came from all apps -- make a copy
- item = ((ApplicationInfo) dragInfo).makeShortcut();
+ item = ((ApplicationInfo) d.dragInfo).makeShortcut();
} else {
- item = (ShortcutInfo) dragInfo;
+ item = (ShortcutInfo) d.dragInfo;
}
item.cellX = -1;
item.cellY = -1;
addItem(item);
+ DragLayer dragLayer = mLauncher.getDragLayer();
+ Rect from = new Rect();
+ dragLayer.getViewRectRelativeToSelf(d.dragView, from);
+ Rect to = new Rect();
+ dragLayer.getDescendantRectRelativeToSelf(this, to);
+
+ int previewSize = FolderRingAnimator.sPreviewSize;
+ int vanishingPointX = (int) (previewSize * 0.7);
+ int vanishingPointY = (int) (previewSize * (1 - 0.88f));
+ to.offset(vanishingPointX - previewSize / 2 , vanishingPointY - previewSize / 2);
+
+ dragLayer.animateView(d.dragView, from, to, 0f, 0.2f, 400, new DecelerateInterpolator(2),
+ new AccelerateInterpolator(2));
}
public DropTarget getDropTargetDelegate(DragObject d) {
@@ -323,20 +339,17 @@ public class FolderIcon extends LinearLayout implements FolderListener {
float maxPerspectiveShift = baselineSize * PERSPECTIVE_SHIFT_FACTOR;
ArrayList<View> items = mFolder.getItemsInReadingOrder(false);
- int firstItemIndex = Math.max(0, items.size() - NUM_ITEMS_IN_PREVIEW);
int xShift = (mOriginalWidth - 2 * halfAvailableSpace) / 2;
int yShift = previewPadding;
canvas.translate(xShift, yShift);
- for (int i = firstItemIndex; i < items.size(); i++) {
- int index = i - firstItemIndex;
- index += Math.max(0, NUM_ITEMS_IN_PREVIEW - items.size());
+ int nItemsInPreview = Math.min(items.size(), NUM_ITEMS_IN_PREVIEW);
+ for (int i = nItemsInPreview - 1; i >= 0; i--) {
+ int index = NUM_ITEMS_IN_PREVIEW - i - 1;
float r = (index * 1.0f) / (NUM_ITEMS_IN_PREVIEW - 1);
float scale = (1 - PERSPECTIVE_SCALE_FACTOR * (1 - r));
- //r = (float) Math.pow(r, 2);
-
float offset = (1 - r) * maxPerspectiveShift;
float scaledSize = scale * baselineSize;
float scaleOffsetCorrection = (1 - scale) * baselineSize;