add: fab and toolbar hide when scrolling
This commit is contained in:
@@ -83,7 +83,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
private FragmentPagerAdapterBuilder.StoredFragmentPagerAdapter mPagerAdapter;
|
||||
|
||||
private OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator();
|
||||
private DrawableSaver mDrawerHeaderBackgroundSaver, mAppbarBackgroundSaver;
|
||||
private DrawableSaver mDrawerHeaderBackgroundSaver;
|
||||
private VersionGuard mVersionGuard;
|
||||
|
||||
|
||||
@@ -178,7 +178,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
R.string.text_drawer_close);
|
||||
drawerToggle.syncState();
|
||||
mDrawerLayout.addDrawerListener(drawerToggle);
|
||||
mAppbarBackgroundSaver = new DrawableSaver.ImageSaver(this, "appbar_background", (ImageView) $(R.id.app_bar_bg));
|
||||
}
|
||||
|
||||
private void setUpTabViewPager() {
|
||||
@@ -192,11 +191,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
tabLayout.setupWithViewPager(mViewPager);
|
||||
}
|
||||
|
||||
@Click(R.id.add)
|
||||
void showAddFilePanel() {
|
||||
mAddBottomMenuPanel.show();
|
||||
}
|
||||
|
||||
@Click(R.id.create_new_file)
|
||||
void createScriptFile() {
|
||||
new ScriptOperations(this, mDrawerLayout)
|
||||
@@ -271,15 +265,9 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
||||
mVersionGuard.checkDeprecateAndUpdate();
|
||||
}
|
||||
|
||||
@Click(R.id.toolbar)
|
||||
public void OnToolbarClick() {
|
||||
mAppbarBackgroundSaver.select(this, mActivityResultMediator);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onMessageEvent(MessageEvent event) {
|
||||
if (event.message.equals(MESSAGE_CLEAR_BACKGROUND_SETTINGS)) {
|
||||
mAppbarBackgroundSaver.reset();
|
||||
mDrawerHeaderBackgroundSaver.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,11 +107,10 @@ public class MyScriptListFragment extends Fragment {
|
||||
mScriptFiles.clear();
|
||||
mDirectories.clear();
|
||||
StorageFileProvider.getDefault().getInitialDirectoryScriptFiles()
|
||||
.subscribeOn(Schedulers.computation())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new SimpleObserver<ScriptFile>() {
|
||||
|
||||
|
||||
@Override
|
||||
public void onNext(@io.reactivex.annotations.NonNull ScriptFile file) {
|
||||
if (file.isFile()) {
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.stardust.widget;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.TimeInterpolator;
|
||||
import android.content.Context;
|
||||
import android.support.design.widget.CoordinatorLayout;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.v4.view.animation.FastOutSlowInInterpolator;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/8/20.
|
||||
*/
|
||||
|
||||
public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior {
|
||||
|
||||
private static final long DURATION = 200;
|
||||
private static final TimeInterpolator INTERPOLATOR = new FastOutSlowInInterpolator();
|
||||
private boolean mHidden = false;
|
||||
|
||||
public ScrollAwareFABBehavior(Context context, AttributeSet attrs) {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
|
||||
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
|
||||
if (dyConsumed > 0) {
|
||||
onScrollDown(coordinatorLayout, child);
|
||||
} else if (dyConsumed < 0) {
|
||||
onScrollUp(coordinatorLayout, child);
|
||||
}
|
||||
}
|
||||
|
||||
private void onScrollUp(CoordinatorLayout parent, FloatingActionButton button) {
|
||||
if (!mHidden) {
|
||||
return;
|
||||
}
|
||||
startShowingAnimation(parent, button);
|
||||
}
|
||||
|
||||
private void startShowingAnimation(CoordinatorLayout parent, FloatingActionButton button) {
|
||||
button.animate()
|
||||
.translationY(0)
|
||||
.setDuration(DURATION)
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
mHidden = false;
|
||||
}
|
||||
})
|
||||
.start();
|
||||
}
|
||||
|
||||
private void onScrollDown(CoordinatorLayout parent, FloatingActionButton button) {
|
||||
if (mHidden) {
|
||||
return;
|
||||
}
|
||||
startHidingAnimation(parent, button);
|
||||
}
|
||||
|
||||
private void startHidingAnimation(CoordinatorLayout parent, FloatingActionButton button) {
|
||||
button.animate()
|
||||
.translationY(parent.getY() + parent.getHeight() - button.getY())
|
||||
.setDuration(DURATION)
|
||||
.setInterpolator(INTERPOLATOR)
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
mHidden = true;
|
||||
}
|
||||
})
|
||||
.start();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -12,58 +12,48 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/app_bar_bg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="128.5dp"
|
||||
android:scaleType="fitXY"/>
|
||||
|
||||
<android.support.design.widget.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@android:color/transparent"
|
||||
android:clipToPadding="false"
|
||||
android:paddingTop="24dp"
|
||||
android:background="#5cab7d"
|
||||
android:paddingTop="24px"
|
||||
android:theme="@style/AppTheme.AppBarOverlay">
|
||||
|
||||
|
||||
<android.support.v7.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:title="@string/_app_name"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/add"
|
||||
android:layout_width="?android:attr/actionBarSize"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="right"
|
||||
android:foreground="?selectableItemBackgroundBorderless"
|
||||
android:padding="12dp"
|
||||
android:src="@drawable/ic_add_white_48dp"/>
|
||||
|
||||
</android.support.v7.widget.Toolbar>
|
||||
app:layout_scrollFlags="scroll|enterAlways"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay"/>
|
||||
|
||||
<android.support.design.widget.TabLayout
|
||||
android:id="@+id/tab"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:tabGravity="fill"
|
||||
app:tabIndicatorColor="@android:color/white"
|
||||
app:tabMode="fixed"
|
||||
app:tabSelectedTextColor="@android:color/primary_text_dark"
|
||||
app:tabTextColor="@android:color/secondary_text_dark"/>
|
||||
|
||||
app:tabMode="scrollable"/>
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<include
|
||||
android:id="@+id/content_main"
|
||||
layout="@layout/content_main"
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/viewpager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
|
||||
|
||||
<android.support.design.widget.FloatingActionButton
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="16dp"
|
||||
android:clickable="true"
|
||||
android:src="@drawable/ic_add_white_48dp"
|
||||
app:backgroundTint="#5cab7d"
|
||||
app:layout_anchor="@id/viewpager"
|
||||
app:layout_anchorGravity="bottom|right|end"
|
||||
app:layout_behavior="com.stardust.widget.ScrollAwareFABBehavior"/>
|
||||
|
||||
<com.stardust.widget.SlidingUpPanel
|
||||
android:id="@+id/bottom_menu"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content_main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||
tools:context="com.stardust.scriptdroid.ui.main.MainActivity"
|
||||
tools:showIn="@layout/activity_main">
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/viewpager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/swipe_refresh_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
@@ -8,4 +9,6 @@
|
||||
android:id="@+id/script_file_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
Reference in New Issue
Block a user