add: fab and toolbar hide when scrolling

This commit is contained in:
hyb1996
2017-08-21 10:48:11 +08:00
parent 5440788922
commit 602b84fc92
9 changed files with 128 additions and 72 deletions

View File

@@ -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();
}
}

View File

@@ -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()) {

View File

@@ -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();
}
}