diff options
author | Tony Wickham <twickham@google.com> | 2017-03-02 00:54:40 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-03-02 00:54:40 +0000 |
commit | 2dcd0ad935f781388f0e920241b54b36b98749f6 (patch) | |
tree | 3b5836dd090ec61f3fe52b4f1a4187d6b6da60c8 | |
parent | 5fcbad03ef33fa8e25de79b115905592d761ef83 (diff) | |
parent | 6c82867a7ea3a95a19d6cec7d1fe164d234d2cb6 (diff) | |
download | android_packages_apps_Trebuchet-2dcd0ad935f781388f0e920241b54b36b98749f6.tar.gz android_packages_apps_Trebuchet-2dcd0ad935f781388f0e920241b54b36b98749f6.tar.bz2 android_packages_apps_Trebuchet-2dcd0ad935f781388f0e920241b54b36b98749f6.zip |
Add shadow to badges
am: 6c82867a7e
Change-Id: I3f54b5908c56c0702772908a8eaf740a95b063bd
-rw-r--r-- | src/com/android/launcher3/ButtonDropTarget.java | 5 | ||||
-rw-r--r-- | src/com/android/launcher3/badge/BadgeRenderer.java | 16 | ||||
-rw-r--r-- | src/com/android/launcher3/dragndrop/DragView.java | 9 | ||||
-rw-r--r-- | src/com/android/launcher3/graphics/IconPalette.java | 7 | ||||
-rw-r--r-- | src/com/android/launcher3/graphics/ShadowGenerator.java | 32 | ||||
-rw-r--r-- | src/com/android/launcher3/util/Themes.java | 19 |
6 files changed, 74 insertions, 14 deletions
diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java index 8d69fe374..8a477d809 100644 --- a/src/com/android/launcher3/ButtonDropTarget.java +++ b/src/com/android/launcher3/ButtonDropTarget.java @@ -42,6 +42,7 @@ import com.android.launcher3.dragndrop.DragController; import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.dragndrop.DragOptions; import com.android.launcher3.dragndrop.DragView; +import com.android.launcher3.util.Themes; import com.android.launcher3.util.Thunk; /** @@ -142,8 +143,8 @@ public abstract class ButtonDropTarget extends TextView mCurrentFilter = new ColorMatrix(); } - DragView.setColorScale(getTextColor(), mSrcFilter); - DragView.setColorScale(targetColor, mDstFilter); + Themes.setColorScaleOnMatrix(getTextColor(), mSrcFilter); + Themes.setColorScaleOnMatrix(targetColor, mDstFilter); ValueAnimator anim1 = ValueAnimator.ofObject( new FloatArrayEvaluator(mCurrentFilter.getArray()), mSrcFilter.getArray(), mDstFilter.getArray()); diff --git a/src/com/android/launcher3/badge/BadgeRenderer.java b/src/com/android/launcher3/badge/BadgeRenderer.java index 1f3e22de2..58969289e 100644 --- a/src/com/android/launcher3/badge/BadgeRenderer.java +++ b/src/com/android/launcher3/badge/BadgeRenderer.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Shader; @@ -27,6 +28,7 @@ import android.support.annotation.Nullable; import com.android.launcher3.R; import com.android.launcher3.graphics.IconPalette; +import com.android.launcher3.graphics.ShadowGenerator; /** * Contains parameters necessary to draw a badge for an icon (e.g. the size of the badge). @@ -39,10 +41,12 @@ public class BadgeRenderer { private final int mTextHeight; private final IconDrawer mLargeIconDrawer; private final IconDrawer mSmallIconDrawer; - private final Paint mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG + | Paint.FILTER_BITMAP_FLAG); + private final Bitmap mBackgroundWithShadow; - public BadgeRenderer(Context context) { + public BadgeRenderer(final Context context) { mContext = context; Resources res = context.getResources(); mSize = res.getDimensionPixelSize(R.dimen.badge_size); @@ -55,6 +59,8 @@ public class BadgeRenderer { Rect tempTextHeight = new Rect(); mTextPaint.getTextBounds("0", 0, 1, tempTextHeight); mTextHeight = tempTextHeight.height(); + + mBackgroundWithShadow = ShadowGenerator.createCircleWithShadow(Color.WHITE, mSize); } /** @@ -67,13 +73,15 @@ public class BadgeRenderer { */ public void draw(Canvas canvas, IconPalette palette, @Nullable BadgeInfo badgeInfo, Rect iconBounds, float badgeScale) { - mBackgroundPaint.setColor(palette.backgroundColor); mTextPaint.setColor(palette.textColor); canvas.save(Canvas.MATRIX_SAVE_FLAG); // We draw the badge relative to its center. canvas.translate(iconBounds.right - mSize / 2, iconBounds.top + mSize / 2); canvas.scale(badgeScale, badgeScale); - canvas.drawCircle(0, 0, mSize / 2, mBackgroundPaint); + mBackgroundPaint.setColorFilter(palette.backgroundColorMatrixFilter); + int backgroundSize = mBackgroundWithShadow.getHeight(); // Same as width. + canvas.drawBitmap(mBackgroundWithShadow, -backgroundSize / 2, -backgroundSize / 2, + mBackgroundPaint); IconDrawer iconDrawer = badgeInfo != null && badgeInfo.isIconLarge() ? mLargeIconDrawer : mSmallIconDrawer; Shader icon = badgeInfo == null ? null : badgeInfo.getNotificationIconForBadge( diff --git a/src/com/android/launcher3/dragndrop/DragView.java b/src/com/android/launcher3/dragndrop/DragView.java index e4c9be4db..7806c98be 100644 --- a/src/com/android/launcher3/dragndrop/DragView.java +++ b/src/com/android/launcher3/dragndrop/DragView.java @@ -24,7 +24,6 @@ import android.animation.ValueAnimator.AnimatorUpdateListener; import android.annotation.SuppressLint; import android.graphics.Bitmap; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; @@ -36,6 +35,7 @@ import android.view.animation.DecelerateInterpolator; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAnimUtils; import com.android.launcher3.R; +import com.android.launcher3.util.Themes; import com.android.launcher3.util.Thunk; import java.util.Arrays; @@ -259,7 +259,7 @@ public class DragView extends View { m1.setSaturation(0); ColorMatrix m2 = new ColorMatrix(); - setColorScale(color, m2); + Themes.setColorScaleOnMatrix(color, m2); m1.postConcat(m2); animateFilterTo(m1.getArray()); @@ -384,11 +384,6 @@ public class DragView extends View { } } - public static void setColorScale(int color, ColorMatrix target) { - target.setScale(Color.red(color) / 255f, Color.green(color) / 255f, - Color.blue(color) / 255f, Color.alpha(color) / 255f); - } - public int getBlurSizeOutline() { return mBlurSizeOutline; } diff --git a/src/com/android/launcher3/graphics/IconPalette.java b/src/com/android/launcher3/graphics/IconPalette.java index 23c6a1230..cd7cf702e 100644 --- a/src/com/android/launcher3/graphics/IconPalette.java +++ b/src/com/android/launcher3/graphics/IconPalette.java @@ -19,11 +19,12 @@ package com.android.launcher3.graphics; import android.app.Notification; import android.content.Context; import android.graphics.Color; +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; import android.support.v4.graphics.ColorUtils; import android.util.Log; import com.android.launcher3.R; -import com.android.launcher3.Utilities; import com.android.launcher3.util.Themes; /** @@ -41,12 +42,16 @@ public class IconPalette { public final int dominantColor; public final int backgroundColor; + public final ColorMatrixColorFilter backgroundColorMatrixFilter; public final int textColor; public final int secondaryColor; private IconPalette(int color) { dominantColor = color; backgroundColor = getMutedColor(dominantColor); + ColorMatrix backgroundColorMatrix = new ColorMatrix(); + Themes.setColorScaleOnMatrix(backgroundColor, backgroundColorMatrix); + backgroundColorMatrixFilter = new ColorMatrixColorFilter(backgroundColorMatrix); textColor = getTextColorForBackground(backgroundColor); secondaryColor = getLowContrastColor(backgroundColor); } diff --git a/src/com/android/launcher3/graphics/ShadowGenerator.java b/src/com/android/launcher3/graphics/ShadowGenerator.java index 31276ecc0..6c603c971 100644 --- a/src/com/android/launcher3/graphics/ShadowGenerator.java +++ b/src/com/android/launcher3/graphics/ShadowGenerator.java @@ -83,6 +83,38 @@ public class ShadowGenerator { return result; } + public static Bitmap createCircleWithShadow(int circleColor, int diameter) { + + float shadowRadius = diameter * 1f / 32; + float shadowYOffset = diameter * 1f / 16; + + int radius = diameter / 2; + + Canvas canvas = new Canvas(); + Paint blurPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + blurPaint.setMaskFilter(new BlurMaskFilter(shadowRadius, Blur.NORMAL)); + + int center = Math.round(radius + shadowRadius + shadowYOffset); + int size = center * 2; + Bitmap result = Bitmap.createBitmap(size, size, Config.ARGB_8888); + canvas.setBitmap(result); + + // Draw ambient shadow, center aligned within size + blurPaint.setAlpha(AMBIENT_SHADOW_ALPHA); + canvas.drawCircle(center, center, radius, blurPaint); + + // Draw key shadow, bottom aligned within size + blurPaint.setAlpha(KEY_SHADOW_ALPHA); + canvas.drawCircle(center, center + shadowYOffset, radius, blurPaint); + + // Draw the circle + Paint drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + drawPaint.setColor(circleColor); + canvas.drawCircle(center, center, radius, drawPaint); + + return result; + } + public static ShadowGenerator getInstance(Context context) { Preconditions.assertNonUiThread(); synchronized (LOCK) { diff --git a/src/com/android/launcher3/util/Themes.java b/src/com/android/launcher3/util/Themes.java index acd589e20..d86333998 100644 --- a/src/com/android/launcher3/util/Themes.java +++ b/src/com/android/launcher3/util/Themes.java @@ -18,6 +18,8 @@ package com.android.launcher3.util; import android.content.Context; import android.content.res.TypedArray; +import android.graphics.Color; +import android.graphics.ColorMatrix; import android.view.ContextThemeWrapper; /** @@ -49,4 +51,21 @@ public class Themes { ta.recycle(); return (int) (255 * alpha + 0.5f); } + + /** + * Scales a color matrix such that, when applied to color R G B A, it produces R' G' B' A' where + * R' = r * R + * G' = g * G + * B' = b * B + * A' = a * A + * + * The matrix will, for instance, turn white into r g b a, and black will remain black. + * + * @param color The color r g b a + * @param target The ColorMatrix to scale + */ + public static void setColorScaleOnMatrix(int color, ColorMatrix target) { + target.setScale(Color.red(color) / 255f, Color.green(color) / 255f, + Color.blue(color) / 255f, Color.alpha(color) / 255f); + } } |