diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2016-07-22 10:50:11 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2016-07-27 17:37:23 -0700 |
commit | a2454ad2d8dcffa94f670853eb464726c73597f1 (patch) | |
tree | 63899483e75a7faadff477cb117bf5c5cfc54962 /src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java | |
parent | 71538da6e2e70af15684cc270a6e67c9b5a010dc (diff) | |
download | android_packages_apps_Trebuchet-a2454ad2d8dcffa94f670853eb464726c73597f1.tar.gz android_packages_apps_Trebuchet-a2454ad2d8dcffa94f670853eb464726c73597f1.tar.bz2 android_packages_apps_Trebuchet-a2454ad2d8dcffa94f670853eb464726c73597f1.zip |
Launcher shortcuts animations update.
> The shortcut container closes with an animation
> When opening/closing the animation only the icon scales
and not the title and drag handle
> When dragging the icon, it starts from the original icon position and
moves under the user finger. The container grows to follow the drag view.
Bug: 28980830
Change-Id: Ic0353c30b682d1f018cbf4d62e8a6e8e7d7d4664
Diffstat (limited to 'src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java')
-rw-r--r-- | src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java b/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java new file mode 100644 index 000000000..a25e475d4 --- /dev/null +++ b/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.shortcuts; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Point; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.widget.ImageView; + +import com.android.launcher3.BubbleTextView; +import com.android.launcher3.HolographicOutlineHelper; +import com.android.launcher3.Launcher; +import com.android.launcher3.R; +import com.android.launcher3.Utilities; +import com.android.launcher3.graphics.DragPreviewProvider; + +/** + * Extension of {@link DragPreviewProvider} which generates bitmaps scaled to the default icon size. + */ +public class ShortcutDragPreviewProvider extends DragPreviewProvider { + + private final Point mPositionShift; + + public ShortcutDragPreviewProvider(View icon, Point shift) { + super(icon); + mPositionShift = shift; + } + + @Override + public Bitmap createDragOutline(Canvas canvas) { + Bitmap b = drawScaledPreview(canvas); + + final int outlineColor = mView.getResources().getColor(R.color.outline_color); + HolographicOutlineHelper.obtain(mView.getContext()) + .applyExpensiveOutlineWithBlur(b, canvas, outlineColor, outlineColor); + canvas.setBitmap(null); + return b; + } + + @Override + public Bitmap createDragBitmap(Canvas canvas) { + Bitmap b = drawScaledPreview(canvas); + canvas.setBitmap(null); + return b; + } + + private Bitmap drawScaledPreview(Canvas canvas) { + Drawable d = mView.getBackground(); + Rect bounds = getDrawableBounds(d); + + int size = Launcher.getLauncher(mView.getContext()).getDeviceProfile().iconSizePx; + + final Bitmap b = Bitmap.createBitmap( + size + DRAG_BITMAP_PADDING, + size + DRAG_BITMAP_PADDING, + Bitmap.Config.ARGB_8888); + + canvas.setBitmap(b); + canvas.save(Canvas.MATRIX_SAVE_FLAG); + canvas.translate(DRAG_BITMAP_PADDING / 2, DRAG_BITMAP_PADDING / 2); + canvas.scale(((float) size) / bounds.width(), ((float) size) / bounds.height(), 0, 0); + canvas.translate(bounds.left, bounds.top); + d.draw(canvas); + canvas.restore(); + return b; + } + + @Override + public float getScaleAndPosition(Bitmap preview, int[] outPos) { + Launcher launcher = Launcher.getLauncher(mView.getContext()); + int iconSize = getDrawableBounds(mView.getBackground()).width(); + float scale = launcher.getDragLayer().getLocationInDragLayer(mView, outPos); + + int iconLeft = mView.getPaddingStart(); + if (Utilities.isRtl(mView.getResources())) { + iconLeft = mView.getWidth() - iconSize - iconLeft; + } + + outPos[0] += Math.round(scale * iconLeft + (scale * iconSize - preview.getWidth()) / 2 + + mPositionShift.x); + outPos[1] += Math.round((scale * mView.getHeight() - preview.getHeight()) / 2 + + mPositionShift.y); + float size = launcher.getDeviceProfile().iconSizePx; + return scale * iconSize / size; + } +} |