Animate navigation bar color changes.
This commit is contained in:
parent
34f1a8a439
commit
ea69dcde9c
1 changed files with 37 additions and 1 deletions
|
|
@ -1,6 +1,10 @@
|
||||||
package com.kabouzeid.gramophone.ui.activities.base;
|
package com.kabouzeid.gramophone.ui.activities.base;
|
||||||
|
|
||||||
|
import android.animation.ArgbEvaluator;
|
||||||
|
import android.animation.ValueAnimator;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.annotation.TargetApi;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.ColorInt;
|
import android.support.annotation.ColorInt;
|
||||||
import android.support.annotation.FloatRange;
|
import android.support.annotation.FloatRange;
|
||||||
|
|
@ -8,12 +12,14 @@ import android.support.annotation.LayoutRes;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
|
import android.view.animation.PathInterpolator;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.player.AbsPlayerFragment;
|
import com.kabouzeid.gramophone.ui.fragments.player.AbsPlayerFragment;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.player.MiniPlayerFragment;
|
import com.kabouzeid.gramophone.ui.fragments.player.MiniPlayerFragment;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.player.card.CardPlayerFragment;
|
import com.kabouzeid.gramophone.ui.fragments.player.card.CardPlayerFragment;
|
||||||
|
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||||
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
|
|
@ -38,6 +44,9 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
private AbsPlayerFragment playerFragment;
|
private AbsPlayerFragment playerFragment;
|
||||||
private MiniPlayerFragment miniPlayerFragment;
|
private MiniPlayerFragment miniPlayerFragment;
|
||||||
|
|
||||||
|
private ValueAnimator navigationBarColorAnimator;
|
||||||
|
private ArgbEvaluator argbEvaluator = new ArgbEvaluator();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
@ -96,6 +105,8 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
@Override
|
@Override
|
||||||
public void onPanelSlide(View panel, @FloatRange(from = 0, to = 1) float slideOffset) {
|
public void onPanelSlide(View panel, @FloatRange(from = 0, to = 1) float slideOffset) {
|
||||||
setMiniPlayerAlphaProgress(slideOffset);
|
setMiniPlayerAlphaProgress(slideOffset);
|
||||||
|
if (navigationBarColorAnimator != null) navigationBarColorAnimator.cancel();
|
||||||
|
super.setNavigationbarColor((int) argbEvaluator.evaluate(slideOffset, navigationbarColor, playerFragment.getPaletteColor()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -195,7 +206,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
|
if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
|
||||||
int playerFragmentColor = playerFragment.getPaletteColor();
|
int playerFragmentColor = playerFragment.getPaletteColor();
|
||||||
super.setTaskDescriptionColor(playerFragmentColor);
|
super.setTaskDescriptionColor(playerFragmentColor);
|
||||||
super.setNavigationbarColor(playerFragmentColor);
|
animateNavigationBarColor(playerFragmentColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -211,10 +222,35 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
public void setNavigationbarColor(int color) {
|
public void setNavigationbarColor(int color) {
|
||||||
this.navigationbarColor = color;
|
this.navigationbarColor = color;
|
||||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||||
|
if (navigationBarColorAnimator != null) navigationBarColorAnimator.cancel();
|
||||||
super.setNavigationbarColor(color);
|
super.setNavigationbarColor(color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void animateNavigationBarColor(int color) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
|
if (navigationBarColorAnimator != null) navigationBarColorAnimator.cancel();
|
||||||
|
navigationBarColorAnimator = ValueAnimator
|
||||||
|
.ofArgb(getWindow().getNavigationBarColor(), color)
|
||||||
|
.setDuration(ViewUtil.PHONOGRAPH_ANIM_TIME);
|
||||||
|
navigationBarColorAnimator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f));
|
||||||
|
navigationBarColorAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
|
||||||
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||||
|
@Override
|
||||||
|
public void onAnimationUpdate(ValueAnimator animation) {
|
||||||
|
AbsSlidingMusicPanelActivity.super.setNavigationbarColor((Integer) animation.getAnimatedValue());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
navigationBarColorAnimator.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (navigationBarColorAnimator != null) navigationBarColorAnimator.cancel(); // just in case
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setTaskDescriptionColor(@ColorInt int color) {
|
public void setTaskDescriptionColor(@ColorInt int color) {
|
||||||
this.taskColor = color;
|
this.taskColor = color;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue