diff options
author | Andy Mast <andy@cyngn.com> | 2014-07-23 11:24:15 -0700 |
---|---|---|
committer | Andy Mast <andy@cyngn.com> | 2014-07-25 17:12:15 +0000 |
commit | a6f892ba64698579b7df1f3d570c846e35a295fa (patch) | |
tree | 6a312435521a35ede7a177dd0df7e1a9f3065acf | |
parent | 2ef1cb3a325a1cd48341733f1d171e22de4eb219 (diff) | |
download | packages_apps_ThemeChooser-a6f892ba64698579b7df1f3d570c846e35a295fa.tar.gz packages_apps_ThemeChooser-a6f892ba64698579b7df1f3d570c846e35a295fa.tar.bz2 packages_apps_ThemeChooser-a6f892ba64698579b7df1f3d570c846e35a295fa.zip |
Add change animations for wallpapers
Change-Id: Id250cf5143aaf842e4b41dab7884af2d915f495c
-rw-r--r-- | src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java | 34 | ||||
-rw-r--r-- | src/org/cyanogenmod/theme/chooserv2/WallpaperCardView.java | 59 |
2 files changed, 84 insertions, 9 deletions
diff --git a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java index 5d26aad..8b784f1 100644 --- a/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java +++ b/src/org/cyanogenmod/theme/chooserv2/ThemeFragment.java @@ -1076,13 +1076,13 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb loadIcons(c, true); break; case LOADER_ID_WALLPAPER: - loadWallpaper(c); + loadWallpaper(c, true); break; case LOADER_ID_NAVIGATION_BAR: loadNavBar(c, true); break; case LOADER_ID_LOCKSCREEN: - loadLockScreen(c); + loadLockScreen(c, true); break; case LOADER_ID_STYLE: loadStyle(c, true); @@ -1135,7 +1135,7 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb } if (shouldShowComponentCard(MODIFIES_LOCKSCREEN)) { - loadLockScreen(c); + loadLockScreen(c, false); } else { mAdditionalCards.removeView(mLockScreenCard); } @@ -1143,9 +1143,9 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb private void loadAdditionalCard(Cursor c, String component) { if (MODIFIES_LOCKSCREEN.equals(component)) { - loadLockScreen(c); + loadLockScreen(c, false); } else if (MODIFIES_LAUNCHER.equals(component)) { - loadWallpaper(c); + loadWallpaper(c, false); } else if (MODIFIES_OVERLAYS.equals(component)) { loadStyle(c, false); } else if (MODIFIES_BOOT_ANIM.equals(component)) { @@ -1224,10 +1224,14 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb } } - private void loadWallpaper(Cursor c) { + private void loadWallpaper(Cursor c, boolean animate) { + Drawable overlay = null; + if (animate) { + overlay = getOverlayDrawable(mWallpaperCard, true); + } + int pkgNameIdx = c.getColumnIndex(ThemesColumns.PKG_NAME); int wpIdx = c.getColumnIndex(PreviewColumns.WALLPAPER_PREVIEW); - final Resources res = getResources(); if (pkgNameIdx > -1) { Bitmap bitmap = Utils.loadBitmapBlob(c, wpIdx); @@ -1245,12 +1249,20 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb mWallpaper.setImageDrawable(wp); mWallpaperCard.setWallpaper(wp); } + + if (animate) { + animateContentChange(R.id.wallpaper_card, mWallpaperCard, overlay); + } } - public void loadLockScreen(Cursor c) { + public void loadLockScreen(Cursor c, boolean animate) { + Drawable overlay = null; + if (animate) { + overlay = getOverlayDrawable(mLockScreenCard, true); + } + int pkgNameIdx = c.getColumnIndex(ThemesColumns.PKG_NAME); int wpIdx = c.getColumnIndex(PreviewColumns.LOCK_WALLPAPER_PREVIEW); - final Resources res = getResources(); if (pkgNameIdx > -1) { Bitmap bitmap = Utils.loadBitmapBlob(c, wpIdx); @@ -1266,6 +1278,10 @@ public class ThemeFragment extends Fragment implements LoaderManager.LoaderCallb } mLockScreenCard.setWallpaper(wp); } + + if (animate) { + animateContentChange(R.id.lockscreen_card, mLockScreenCard, overlay); + } } private void loadStatusBar(Cursor c, boolean animate) { diff --git a/src/org/cyanogenmod/theme/chooserv2/WallpaperCardView.java b/src/org/cyanogenmod/theme/chooserv2/WallpaperCardView.java index d9e063c..a2adf0c 100644 --- a/src/org/cyanogenmod/theme/chooserv2/WallpaperCardView.java +++ b/src/org/cyanogenmod/theme/chooserv2/WallpaperCardView.java @@ -1,10 +1,16 @@ package org.cyanogenmod.theme.chooserv2; +import android.animation.Animator; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; +import android.animation.ValueAnimator; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewOverlay; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; @@ -49,11 +55,64 @@ public class WallpaperCardView extends ComponentCardView { mImage.setImageDrawable(drawable); } + @Override public void expand() { // Do nothing } + @Override public void collapse() { // Do nothing } + + /** + * Animates a change in the content of the card + * @param v View in card to animate + * @param overlay Drawable to animate as a ViewOverlay + * @param duration Duration of animation + */ + @Override + public void animateContentChange(View v, final Drawable overlay, long duration) { + // Since the wallpaper IS the content, we will ignore the view passed in and animate + // the entire card + final ViewOverlay viewOverlay = this.getOverlay(); + viewOverlay.add(overlay); + final int x = 0; + final int y = 0; + final int width = v.getWidth(); + final int height = v.getHeight(); + overlay.setBounds(x, y, x + width, y + height); + + final ValueAnimator overlayAnimator = ValueAnimator.ofFloat(1f, 0f); + overlayAnimator.setDuration(duration); + overlayAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float value = (Float) animation.getAnimatedValue(); + overlay.setAlpha((int) (255 * value)); + } + + }); + overlayAnimator.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) {} + + @Override + public void onAnimationEnd(Animator animation) { + // Clear out the ViewOverlay now that we are done animating + viewOverlay.clear(); + } + + @Override + public void onAnimationCancel(Animator animation) {} + + @Override + public void onAnimationRepeat(Animator animation) {} + }); + + AnimatorSet set = new AnimatorSet(); + set.play(ObjectAnimator.ofFloat(overlay, "alpha", 0f, 1f)) + .with(overlayAnimator); + set.start(); + } } |