Improve toolbar scrim
This commit is contained in:
parent
00b6b7b23c
commit
0f6aab7f2c
12 changed files with 96 additions and 28 deletions
|
|
@ -4,6 +4,7 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
import com.kabouzeid.gramophone.dialogs.AddToPlaylistDialog;
|
||||||
|
|
@ -24,10 +25,12 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
|
||||||
public static final String TAG = AbsPlayerFragment.class.getSimpleName();
|
public static final String TAG = AbsPlayerFragment.class.getSimpleName();
|
||||||
|
|
||||||
private Callbacks callbacks;
|
private Callbacks callbacks;
|
||||||
|
private boolean isToolbarVisible;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Context context) {
|
public void onAttach(Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
|
isToolbarVisible = true;
|
||||||
try {
|
try {
|
||||||
callbacks = (Callbacks) context;
|
callbacks = (Callbacks) context;
|
||||||
} catch (ClassCastException e) {
|
} catch (ClassCastException e) {
|
||||||
|
|
@ -88,6 +91,23 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
|
||||||
MusicUtil.toggleFavorite(getActivity(), song);
|
MusicUtil.toggleFavorite(getActivity(), song);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void toggleToolbar(final View toolbar) {
|
||||||
|
if (toolbar == null) return;
|
||||||
|
|
||||||
|
isToolbarVisible = !isToolbarVisible;
|
||||||
|
if (isToolbarVisible) {
|
||||||
|
toolbar.setVisibility(View.VISIBLE);
|
||||||
|
toolbar.animate().alpha(1f).setDuration(PlayerAlbumCoverFragment.VISIBILITY_ANIM_DURATION);
|
||||||
|
} else {
|
||||||
|
toolbar.animate().alpha(0f).setDuration(PlayerAlbumCoverFragment.VISIBILITY_ANIM_DURATION).withEndAction(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
toolbar.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected String getUpNextAndQueueTime() {
|
protected String getUpNextAndQueueTime() {
|
||||||
return getResources().getString(R.string.up_next) + " • " + MusicUtil.getReadableDurationString(MusicPlayerRemote.getQueueDurationMillis(MusicPlayerRemote.getPosition()));
|
return getResources().getString(R.string.up_next) + " • " + MusicUtil.getReadableDurationString(MusicPlayerRemote.getQueueDurationMillis(MusicPlayerRemote.getPosition()));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ import butterknife.Unbinder;
|
||||||
public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements ViewPager.OnPageChangeListener, MusicProgressViewUpdateHelper.Callback {
|
public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements ViewPager.OnPageChangeListener, MusicProgressViewUpdateHelper.Callback {
|
||||||
public static final String TAG = PlayerAlbumCoverFragment.class.getSimpleName();
|
public static final String TAG = PlayerAlbumCoverFragment.class.getSimpleName();
|
||||||
|
|
||||||
public static final int LYRICS_ANIM_DURATION = 300;
|
public static final int VISIBILITY_ANIM_DURATION = 300;
|
||||||
|
|
||||||
private Unbinder unbinder;
|
private Unbinder unbinder;
|
||||||
|
|
||||||
|
|
@ -71,6 +71,15 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
viewPager.addOnPageChangeListener(this);
|
viewPager.addOnPageChangeListener(this);
|
||||||
viewPager.setOnTouchListener(new View.OnTouchListener() {
|
viewPager.setOnTouchListener(new View.OnTouchListener() {
|
||||||
GestureDetector gestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {
|
GestureDetector gestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onSingleTapConfirmed(MotionEvent e) {
|
||||||
|
if (callbacks != null) {
|
||||||
|
callbacks.onToolbarToggled();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.onSingleTapConfirmed(e);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onDoubleTap(MotionEvent e) {
|
public boolean onDoubleTap(MotionEvent e) {
|
||||||
if (callbacks != null) {
|
if (callbacks != null) {
|
||||||
|
|
@ -121,7 +130,6 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -144,7 +152,6 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPageScrollStateChanged(int state) {
|
public void onPageScrollStateChanged(int state) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showHeartAnimation() {
|
public void showHeartAnimation() {
|
||||||
|
|
@ -193,7 +200,7 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
}
|
}
|
||||||
|
|
||||||
private void hideLyricsLayout() {
|
private void hideLyricsLayout() {
|
||||||
lyricsLayout.animate().alpha(0f).setDuration(PlayerAlbumCoverFragment.LYRICS_ANIM_DURATION).withEndAction(new Runnable() {
|
lyricsLayout.animate().alpha(0f).setDuration(PlayerAlbumCoverFragment.VISIBILITY_ANIM_DURATION).withEndAction(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (!isLyricsLayoutBound()) return;
|
if (!isLyricsLayoutBound()) return;
|
||||||
|
|
@ -218,7 +225,7 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
lyricsLine2.setText(null);
|
lyricsLine2.setText(null);
|
||||||
|
|
||||||
lyricsLayout.setVisibility(View.VISIBLE);
|
lyricsLayout.setVisibility(View.VISIBLE);
|
||||||
lyricsLayout.animate().alpha(1f).setDuration(PlayerAlbumCoverFragment.LYRICS_ANIM_DURATION);
|
lyricsLayout.animate().alpha(1f).setDuration(PlayerAlbumCoverFragment.VISIBILITY_ANIM_DURATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void notifyColorChange(int color) {
|
private void notifyColorChange(int color) {
|
||||||
|
|
@ -259,11 +266,11 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
|
|
||||||
lyricsLine1.setAlpha(1f);
|
lyricsLine1.setAlpha(1f);
|
||||||
lyricsLine1.setTranslationY(0f);
|
lyricsLine1.setTranslationY(0f);
|
||||||
lyricsLine1.animate().alpha(0f).translationY(-h).setDuration(PlayerAlbumCoverFragment.LYRICS_ANIM_DURATION);
|
lyricsLine1.animate().alpha(0f).translationY(-h).setDuration(PlayerAlbumCoverFragment.VISIBILITY_ANIM_DURATION);
|
||||||
|
|
||||||
lyricsLine2.setAlpha(0f);
|
lyricsLine2.setAlpha(0f);
|
||||||
lyricsLine2.setTranslationY(h);
|
lyricsLine2.setTranslationY(h);
|
||||||
lyricsLine2.animate().alpha(1f).translationY(0f).setDuration(PlayerAlbumCoverFragment.LYRICS_ANIM_DURATION);
|
lyricsLine2.animate().alpha(1f).translationY(0f).setDuration(PlayerAlbumCoverFragment.VISIBILITY_ANIM_DURATION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -271,5 +278,7 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
void onColorChanged(int color);
|
void onColorChanged(int color);
|
||||||
|
|
||||||
void onFavoriteToggled();
|
void onFavoriteToggled();
|
||||||
|
|
||||||
|
void onToolbarToggled();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import android.os.AsyncTask;
|
||||||
import android.os.Build;
|
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.Nullable;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.CardView;
|
import android.support.v7.widget.CardView;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
|
@ -23,6 +24,7 @@ import android.view.View;
|
||||||
import android.view.ViewAnimationUtils;
|
import android.view.ViewAnimationUtils;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
|
@ -61,6 +63,9 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
|
||||||
|
|
||||||
private Unbinder unbinder;
|
private Unbinder unbinder;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@BindView(R.id.toolbar_container)
|
||||||
|
FrameLayout toolbarContainer;
|
||||||
@BindView(R.id.player_toolbar)
|
@BindView(R.id.player_toolbar)
|
||||||
Toolbar toolbar;
|
Toolbar toolbar;
|
||||||
@BindView(R.id.player_sliding_layout)
|
@BindView(R.id.player_sliding_layout)
|
||||||
|
|
@ -267,7 +272,6 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
|
||||||
layoutManager.scrollToPositionWithOffset(MusicPlayerRemote.getPosition() + 1, 0);
|
layoutManager.scrollToPositionWithOffset(MusicPlayerRemote.getPosition() + 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void updateIsFavorite() {
|
private void updateIsFavorite() {
|
||||||
if (updateIsFavoriteTask != null) updateIsFavoriteTask.cancel(false);
|
if (updateIsFavoriteTask != null) updateIsFavoriteTask.cancel(false);
|
||||||
updateIsFavoriteTask = new AsyncTask<Song, Void, Boolean>() {
|
updateIsFavoriteTask = new AsyncTask<Song, Void, Boolean>() {
|
||||||
|
|
@ -403,6 +407,11 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
|
||||||
toggleFavorite(MusicPlayerRemote.getCurrentSong());
|
toggleFavorite(MusicPlayerRemote.getCurrentSong());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onToolbarToggled() {
|
||||||
|
toggleToolbar(toolbarContainer);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPanelSlide(View view, float slide) {
|
public void onPanelSlide(View view, float slide) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import android.view.MenuItem;
|
||||||
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.widget.FrameLayout;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
|
@ -61,6 +62,9 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
|
||||||
|
|
||||||
@BindView(R.id.player_status_bar)
|
@BindView(R.id.player_status_bar)
|
||||||
View playerStatusBar;
|
View playerStatusBar;
|
||||||
|
@Nullable
|
||||||
|
@BindView(R.id.toolbar_container)
|
||||||
|
FrameLayout toolbarContainer;
|
||||||
@BindView(R.id.player_toolbar)
|
@BindView(R.id.player_toolbar)
|
||||||
Toolbar toolbar;
|
Toolbar toolbar;
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
@ -263,7 +267,6 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
|
||||||
layoutManager.scrollToPositionWithOffset(MusicPlayerRemote.getPosition() + 1, 0);
|
layoutManager.scrollToPositionWithOffset(MusicPlayerRemote.getPosition() + 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void updateIsFavorite() {
|
private void updateIsFavorite() {
|
||||||
if (updateIsFavoriteTask != null) updateIsFavoriteTask.cancel(false);
|
if (updateIsFavoriteTask != null) updateIsFavoriteTask.cancel(false);
|
||||||
updateIsFavoriteTask = new AsyncTask<Song, Void, Boolean>() {
|
updateIsFavoriteTask = new AsyncTask<Song, Void, Boolean>() {
|
||||||
|
|
@ -399,6 +402,11 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
|
||||||
toggleFavorite(MusicPlayerRemote.getCurrentSong());
|
toggleFavorite(MusicPlayerRemote.getCurrentSong());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onToolbarToggled() {
|
||||||
|
toggleToolbar(toolbarContainer);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPanelSlide(View view, float slide) {
|
public void onPanelSlide(View view, float slide) {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
9
app/src/main/res/drawable/toolbar_gradient.xml
Normal file
9
app/src/main/res/drawable/toolbar_gradient.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<gradient
|
||||||
|
android:angle="90"
|
||||||
|
android:centerY="0.33"
|
||||||
|
android:endColor="@color/thirty_three_percent_black_overlay"
|
||||||
|
android:startColor="#00000000" />
|
||||||
|
</shape>
|
||||||
|
|
@ -58,13 +58,21 @@
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<include layout="@layout/shadow_statusbar_toolbar" />
|
<FrameLayout
|
||||||
|
android:id="@+id/toolbar_container"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="@dimen/toolbar_scrim_height"
|
||||||
|
android:background="@drawable/toolbar_gradient">
|
||||||
|
|
||||||
<android.support.v7.widget.Toolbar
|
<include layout="@layout/shadow_statusbar_toolbar" />
|
||||||
android:id="@+id/player_toolbar"
|
|
||||||
style="@style/Toolbar"
|
<android.support.v7.widget.Toolbar
|
||||||
android:layout_marginTop="@dimen/status_bar_padding"
|
android:id="@+id/player_toolbar"
|
||||||
android:background="@android:color/transparent" />
|
style="@style/Toolbar"
|
||||||
|
android:layout_marginTop="@dimen/status_bar_padding"
|
||||||
|
android:background="@android:color/transparent" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -56,12 +56,18 @@
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
<include layout="@layout/shadow_toolbar" />
|
<FrameLayout
|
||||||
|
android:id="@+id/toolbar_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/toolbar_scrim_height"
|
||||||
|
android:background="@drawable/toolbar_gradient">
|
||||||
|
|
||||||
<android.support.v7.widget.Toolbar
|
<android.support.v7.widget.Toolbar
|
||||||
android:id="@+id/player_toolbar"
|
android:id="@+id/player_toolbar"
|
||||||
style="@style/Toolbar"
|
style="@style/Toolbar"
|
||||||
android:background="@android:color/transparent" />
|
android:background="@android:color/transparent" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="56dp"
|
android:layout_height="112dp"
|
||||||
android:layout_gravity="bottom"
|
android:layout_gravity="bottom"
|
||||||
android:background="@drawable/shadow_up" />
|
android:background="@drawable/shadow_up" />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,9 @@
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/toolbar_scrim_height"
|
||||||
android:layout_alignBottom="@id/dummy_statusbar_actionbar"
|
android:layout_alignBottom="@id/dummy_statusbar_actionbar"
|
||||||
android:layout_alignTop="@id/dummy_statusbar_actionbar"
|
android:layout_alignTop="@id/dummy_statusbar_actionbar"
|
||||||
android:background="@drawable/shadow_down" />
|
android:background="@drawable/toolbar_gradient" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<View xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?actionBarSize"
|
|
||||||
android:background="@drawable/shadow_down" />
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<color name="twenty_percent_black_overlay">#34000000</color>
|
<color name="twenty_percent_black_overlay">#34000000</color>
|
||||||
|
<color name="thirty_three_percent_black_overlay">#54000000</color>
|
||||||
|
|
||||||
<color name="app_shortcut_default_foreground">#607d8b</color>
|
<color name="app_shortcut_default_foreground">#607d8b</color>
|
||||||
<color name="app_shortcut_default_background">#f5f5f5</color>
|
<color name="app_shortcut_default_background">#f5f5f5</color>
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@
|
||||||
<dimen name="toolbar_elevation">4dp</dimen>
|
<dimen name="toolbar_elevation">4dp</dimen>
|
||||||
<dimen name="card_elevation">2dp</dimen>
|
<dimen name="card_elevation">2dp</dimen>
|
||||||
|
|
||||||
|
<!-- 3x standard action bar height (56dp) -->
|
||||||
|
<dimen name="toolbar_scrim_height">168dp</dimen>
|
||||||
|
|
||||||
<dimen name="header_image_height">360dp</dimen>
|
<dimen name="header_image_height">360dp</dimen>
|
||||||
<dimen name="progress_container_height">20dp</dimen>
|
<dimen name="progress_container_height">20dp</dimen>
|
||||||
<dimen name="fab_media_controller_container_height">120dp</dimen>
|
<dimen name="fab_media_controller_container_height">120dp</dimen>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue