diff options
author | Patrick Dubroy <dubroy@google.com> | 2010-10-14 13:21:48 -0700 |
---|---|---|
committer | Patrick Dubroy <dubroy@google.com> | 2010-10-20 14:37:49 -0700 |
commit | 8e58e916061cbe2623697efac0924f2aa3753a92 (patch) | |
tree | a0350aadf47041a62cf81aa1230a3a6769b6bb97 /src/com | |
parent | ce34a9768b01115def95f000a6a8f35870f10d3a (diff) | |
download | packages_apps_trebuchet-8e58e916061cbe2623697efac0924f2aa3753a92.zip packages_apps_trebuchet-8e58e916061cbe2623697efac0924f2aa3753a92.tar.gz packages_apps_trebuchet-8e58e916061cbe2623697efac0924f2aa3753a92.tar.bz2 |
Various cleanups in the drag viz code.
Most importantly:
- Don't allocate a new Paint object in CellLayout.onDraw
- Scale holographic outlines based on the screen density
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/launcher2/CellLayout.java | 11 | ||||
-rw-r--r-- | src/com/android/launcher2/HolographicOutlineHelper.java | 37 | ||||
-rw-r--r-- | src/com/android/launcher2/LauncherApplication.java | 6 | ||||
-rw-r--r-- | src/com/android/launcher2/Workspace.java | 16 |
4 files changed, 44 insertions, 26 deletions
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java index c9be887..d94bacf 100644 --- a/src/com/android/launcher2/CellLayout.java +++ b/src/com/android/launcher2/CellLayout.java @@ -49,6 +49,8 @@ import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.view.animation.LayoutAnimationController; +import java.util.Arrays; + public class CellLayout extends ViewGroup implements Dimmable { static final String TAG = "CellLayout"; @@ -107,6 +109,7 @@ public class CellLayout extends ViewGroup implements Dimmable { // Used as an index into the above 3 arrays; indicates which is the most current value. private int mDragOutlineCurrent = 0; + private final Paint mDragOutlinePaint = new Paint(); private Drawable mCrosshairsDrawable = null; private InterruptibleInOutAnimator mCrosshairsAnimator = null; @@ -188,7 +191,7 @@ public class CellLayout extends ViewGroup implements Dimmable { mCrosshairsAnimator.getAnimator().addUpdateListener(new AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { mCrosshairsVisibility = ((Float) animation.getAnimatedValue()).floatValue(); - CellLayout.this.invalidate(); + invalidate(); } }); mCrosshairsAnimator.getAnimator().setInterpolator(mEaseOutInterpolator); @@ -205,9 +208,7 @@ public class CellLayout extends ViewGroup implements Dimmable { final float fromAlphaValue = 0; final float toAlphaValue = (float)res.getInteger(R.integer.config_dragOutlineMaxAlpha); - for (int i = 0; i < mDragOutlineAlphas.length; i++) { - mDragOutlineAlphas[i] = fromAlphaValue; - } + Arrays.fill(mDragOutlineAlphas, fromAlphaValue); for (int i = 0; i < mDragOutlineAnims.length; i++) { final InterruptibleInOutAnimator anim = @@ -404,7 +405,7 @@ public class CellLayout extends ViewGroup implements Dimmable { } } - final Paint paint = new Paint(); + final Paint paint = mDragOutlinePaint; for (int i = 0; i < mDragOutlines.length; i++) { final float alpha = mDragOutlineAlphas[i]; if (alpha > 0) { diff --git a/src/com/android/launcher2/HolographicOutlineHelper.java b/src/com/android/launcher2/HolographicOutlineHelper.java index ea4b01a..bca3f71 100644 --- a/src/com/android/launcher2/HolographicOutlineHelper.java +++ b/src/com/android/launcher2/HolographicOutlineHelper.java @@ -23,7 +23,6 @@ import android.graphics.MaskFilter; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; import android.graphics.TableMaskFilter; public class HolographicOutlineHelper { @@ -31,19 +30,24 @@ public class HolographicOutlineHelper { private final Paint mBlurPaint = new Paint(); private final Paint mErasePaint = new Paint(); - private static final BlurMaskFilter sLargeGlowBlurMaskFilter = new BlurMaskFilter( - 10.0f, BlurMaskFilter.Blur.OUTER); - private static final BlurMaskFilter sThickOuterBlurMaskFilter = new BlurMaskFilter( - 6.0f, BlurMaskFilter.Blur.OUTER); - private static final BlurMaskFilter sMediumOuterBlurMaskFilter = new BlurMaskFilter( - 2.0f, BlurMaskFilter.Blur.OUTER); - private static final BlurMaskFilter sThinOuterBlurMaskFilter = new BlurMaskFilter( - 1.0f, BlurMaskFilter.Blur.OUTER); + public static final int OUTER_BLUR_RADIUS; - private static final BlurMaskFilter sThickInnerBlurMaskFilter = new BlurMaskFilter( - 4.0f, BlurMaskFilter.Blur.NORMAL); - private static final BlurMaskFilter sThinInnerBlurMaskFilter = new BlurMaskFilter( - 1.0f, BlurMaskFilter.Blur.INNER); + private static final BlurMaskFilter sThickOuterBlurMaskFilter; + private static final BlurMaskFilter sMediumOuterBlurMaskFilter; + private static final BlurMaskFilter sThinOuterBlurMaskFilter; + private static final BlurMaskFilter sThickInnerBlurMaskFilter; + + static { + final float scale = LauncherApplication.getScreenDensity(); + + OUTER_BLUR_RADIUS = (int) (scale * 6.0f); + + sThickOuterBlurMaskFilter = new BlurMaskFilter(OUTER_BLUR_RADIUS, + BlurMaskFilter.Blur.OUTER); + sMediumOuterBlurMaskFilter = new BlurMaskFilter(scale * 2.0f, BlurMaskFilter.Blur.OUTER); + sThinOuterBlurMaskFilter = new BlurMaskFilter(scale * 1.0f, BlurMaskFilter.Blur.OUTER); + sThickInnerBlurMaskFilter = new BlurMaskFilter(scale * 4.0f, BlurMaskFilter.Blur.NORMAL); + } private static final MaskFilter sFineClipTable = TableMaskFilter.CreateClipTable(0, 20); private static final MaskFilter sCoarseClipTable = TableMaskFilter.CreateClipTable(0, 200); @@ -81,7 +85,12 @@ public class HolographicOutlineHelper { } } - void applyGlow(Bitmap bitmap, Canvas canvas, int color) { + /** + * Apply an outer blur to the given bitmap. + * You should use OUTER_BLUR_RADIUS to ensure that the bitmap is big enough to draw + * the blur without clipping. + */ + void applyOuterBlur(Bitmap bitmap, Canvas canvas, int color) { mBlurPaint.setMaskFilter(sThickOuterBlurMaskFilter); Bitmap glow = bitmap.extractAlpha(mBlurPaint, mTempOffset); diff --git a/src/com/android/launcher2/LauncherApplication.java b/src/com/android/launcher2/LauncherApplication.java index ca08378..8a18317 100644 --- a/src/com/android/launcher2/LauncherApplication.java +++ b/src/com/android/launcher2/LauncherApplication.java @@ -29,6 +29,7 @@ public class LauncherApplication extends Application { public LauncherModel mModel; public IconCache mIconCache; private static boolean sIsScreenXLarge; + private static float sScreenDensity; private static final boolean ENABLE_ROTATION = false; @Override @@ -40,6 +41,7 @@ public class LauncherApplication extends Application { mIconCache = new IconCache(this); mModel = new LauncherModel(this, mIconCache); sIsScreenXLarge = (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE; + sScreenDensity = getResources().getDisplayMetrics().density; // Register intent receivers IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); @@ -101,4 +103,8 @@ public class LauncherApplication extends Application { public static boolean isScreenXLarge() { return sIsScreenXLarge; } + + public static float getScreenDensity() { + return sScreenDensity; + } } diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index dd622a6..d123374 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -139,10 +139,10 @@ public class Workspace extends SmoothPagedView private boolean mInScrollArea = false; - private HolographicOutlineHelper mOutlineHelper = new HolographicOutlineHelper(); + private final HolographicOutlineHelper mOutlineHelper = new HolographicOutlineHelper(); private Bitmap mDragOutline = null; - private Rect mTempRect = new Rect(); - private int[] mTempXY = new int[2]; + private final Rect mTempRect = new Rect(); + private final int[] mTempXY = new int[2]; /** * Used to inflate the Workspace from XML. @@ -991,14 +991,13 @@ public class Workspace extends SmoothPagedView canvas.setBitmap(b); canvas.drawBitmap(mDragOutline, 0, 0, null); drawDragView(v, canvas, padding); - mOutlineHelper.applyGlow(b, canvas, outlineColor); + mOutlineHelper.applyOuterBlur(b, canvas, outlineColor); return b; } void startDrag(CellLayout.CellInfo cellInfo) { View child = cellInfo.cell; - final int blurPadding = 40; // Make sure the drag was started by a long press as opposed to a long click. if (!child.isInTouchMode()) { @@ -1017,11 +1016,14 @@ public class Workspace extends SmoothPagedView final Canvas canvas = new Canvas(); + // We need to add extra padding to the bitmap to make room for the glow effect + final int bitmapPadding = HolographicOutlineHelper.OUTER_BLUR_RADIUS; + // The outline is used to visualize where the item will land if dropped - mDragOutline = createDragOutline(child, canvas, blurPadding); + mDragOutline = createDragOutline(child, canvas, bitmapPadding); // The drag bitmap follows the touch point around on the screen - final Bitmap b = createDragBitmap(child, canvas, blurPadding); + final Bitmap b = createDragBitmap(child, canvas, bitmapPadding); final int bmpWidth = b.getWidth(); final int bmpHeight = b.getHeight(); |