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

@@ -89,7 +89,9 @@ dependencies {
annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
// ButterKnife
compile 'com.jakewharton:butterknife:8.6.0'
compile('com.jakewharton:butterknife:8.6.0', {
exclude group: 'com.android.support'
})
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
// Android supports
compile 'com.android.support:appcompat-v7:25.3.1'
@@ -99,7 +101,9 @@ dependencies {
// Personal libraries
compile 'com.github.hyb1996:MutableTheme:0.2.2'
// Material Dialogs
compile 'com.afollestad.material-dialogs:core:0.9.2.3'
compile('com.afollestad.material-dialogs:core:0.9.2.3', {
exclude group: 'com.android.support'
})
// Gson
compile 'com.google.code.gson:gson:2.8.0'
// Common Markdown
@@ -109,7 +113,10 @@ dependencies {
// Console
compile 'com.jraska:console:0.4.3'
// Android issue reporter (a github issue reporter)
compile 'com.heinrichreimersoftware:android-issue-reporter:1.3.1'
compile('com.heinrichreimersoftware:android-issue-reporter:1.3.1', {
exclude group: 'com.afollestad.material-dialogs'
exclude group: 'com.android.support'
})
//
compile 'com.github.hyb1996:android-multi-level-listview:1.1'
compile 'de.psdev.licensesdialog:licensesdialog:1.8.1'
@@ -126,7 +133,9 @@ dependencies {
compile 'com.flurry.android:analytics:7.0.0@aar'
compile 'com.pushtorefresh.storio:sqlite:1.12.3'
// 920 Text Editors
compile 'com.afollestad.material-dialogs:commons:0.9.2.3'
compile('com.afollestad.material-dialogs:commons:0.9.2.3', {
exclude group: 'com.android.support'
})
compile 'com.makeramen:roundedimageview:2.2.1'
compile 'com.rengwuxian.materialedittext:library:2.0.3'
compile 'org.msgpack:msgpack-core:0.8.11'

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

View File

@@ -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"

View File

@@ -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>

View File

@@ -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>

View File

@@ -38,7 +38,11 @@ dependencies {
compile 'com.github.hyb1996:DynamicLayoutInflator:0.1'
compile 'org.greenrobot:eventbus:3.0.0'
compile 'net.lingala.zip4j:zip4j:1.3.2'
compile 'com.afollestad.material-dialogs:core:0.9.2.3'
compile('com.afollestad.material-dialogs:core:0.9.2.3', {
exclude group: 'com.android.support'
})
compile 'com.android.support:design:25.3.1'
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.github.hyb1996:EnhancedFloaty:0.17'
// Terminal emulator
compile(name: 'libtermexec-release', ext: 'aar')

View File

@@ -39,7 +39,7 @@ dependencies {
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.0'
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
compile project(':automator')
compile project(':common')