add: fab and toolbar hide when scrolling
This commit is contained in:
@@ -89,7 +89,9 @@ dependencies {
|
|||||||
annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
|
annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
|
||||||
compile "org.androidannotations:androidannotations-api:$AAVersion"
|
compile "org.androidannotations:androidannotations-api:$AAVersion"
|
||||||
// ButterKnife
|
// 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'
|
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
|
||||||
// Android supports
|
// Android supports
|
||||||
compile 'com.android.support:appcompat-v7:25.3.1'
|
compile 'com.android.support:appcompat-v7:25.3.1'
|
||||||
@@ -99,7 +101,9 @@ dependencies {
|
|||||||
// Personal libraries
|
// Personal libraries
|
||||||
compile 'com.github.hyb1996:MutableTheme:0.2.2'
|
compile 'com.github.hyb1996:MutableTheme:0.2.2'
|
||||||
// Material Dialogs
|
// 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
|
// Gson
|
||||||
compile 'com.google.code.gson:gson:2.8.0'
|
compile 'com.google.code.gson:gson:2.8.0'
|
||||||
// Common Markdown
|
// Common Markdown
|
||||||
@@ -109,7 +113,10 @@ dependencies {
|
|||||||
// Console
|
// Console
|
||||||
compile 'com.jraska:console:0.4.3'
|
compile 'com.jraska:console:0.4.3'
|
||||||
// Android issue reporter (a github issue reporter)
|
// 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 'com.github.hyb1996:android-multi-level-listview:1.1'
|
||||||
compile 'de.psdev.licensesdialog:licensesdialog:1.8.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.flurry.android:analytics:7.0.0@aar'
|
||||||
compile 'com.pushtorefresh.storio:sqlite:1.12.3'
|
compile 'com.pushtorefresh.storio:sqlite:1.12.3'
|
||||||
// 920 Text Editors
|
// 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.makeramen:roundedimageview:2.2.1'
|
||||||
compile 'com.rengwuxian.materialedittext:library:2.0.3'
|
compile 'com.rengwuxian.materialedittext:library:2.0.3'
|
||||||
compile 'org.msgpack:msgpack-core:0.8.11'
|
compile 'org.msgpack:msgpack-core:0.8.11'
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
private FragmentPagerAdapterBuilder.StoredFragmentPagerAdapter mPagerAdapter;
|
private FragmentPagerAdapterBuilder.StoredFragmentPagerAdapter mPagerAdapter;
|
||||||
|
|
||||||
private OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator();
|
private OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator();
|
||||||
private DrawableSaver mDrawerHeaderBackgroundSaver, mAppbarBackgroundSaver;
|
private DrawableSaver mDrawerHeaderBackgroundSaver;
|
||||||
private VersionGuard mVersionGuard;
|
private VersionGuard mVersionGuard;
|
||||||
|
|
||||||
|
|
||||||
@@ -178,7 +178,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
R.string.text_drawer_close);
|
R.string.text_drawer_close);
|
||||||
drawerToggle.syncState();
|
drawerToggle.syncState();
|
||||||
mDrawerLayout.addDrawerListener(drawerToggle);
|
mDrawerLayout.addDrawerListener(drawerToggle);
|
||||||
mAppbarBackgroundSaver = new DrawableSaver.ImageSaver(this, "appbar_background", (ImageView) $(R.id.app_bar_bg));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpTabViewPager() {
|
private void setUpTabViewPager() {
|
||||||
@@ -192,11 +191,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
tabLayout.setupWithViewPager(mViewPager);
|
tabLayout.setupWithViewPager(mViewPager);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Click(R.id.add)
|
|
||||||
void showAddFilePanel() {
|
|
||||||
mAddBottomMenuPanel.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Click(R.id.create_new_file)
|
@Click(R.id.create_new_file)
|
||||||
void createScriptFile() {
|
void createScriptFile() {
|
||||||
new ScriptOperations(this, mDrawerLayout)
|
new ScriptOperations(this, mDrawerLayout)
|
||||||
@@ -271,15 +265,9 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
|
|||||||
mVersionGuard.checkDeprecateAndUpdate();
|
mVersionGuard.checkDeprecateAndUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Click(R.id.toolbar)
|
|
||||||
public void OnToolbarClick() {
|
|
||||||
mAppbarBackgroundSaver.select(this, mActivityResultMediator);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onMessageEvent(MessageEvent event) {
|
public void onMessageEvent(MessageEvent event) {
|
||||||
if (event.message.equals(MESSAGE_CLEAR_BACKGROUND_SETTINGS)) {
|
if (event.message.equals(MESSAGE_CLEAR_BACKGROUND_SETTINGS)) {
|
||||||
mAppbarBackgroundSaver.reset();
|
|
||||||
mDrawerHeaderBackgroundSaver.reset();
|
mDrawerHeaderBackgroundSaver.reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,11 +107,10 @@ public class MyScriptListFragment extends Fragment {
|
|||||||
mScriptFiles.clear();
|
mScriptFiles.clear();
|
||||||
mDirectories.clear();
|
mDirectories.clear();
|
||||||
StorageFileProvider.getDefault().getInitialDirectoryScriptFiles()
|
StorageFileProvider.getDefault().getInitialDirectoryScriptFiles()
|
||||||
.subscribeOn(Schedulers.computation())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(new SimpleObserver<ScriptFile>() {
|
.subscribe(new SimpleObserver<ScriptFile>() {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNext(@io.reactivex.annotations.NonNull ScriptFile file) {
|
public void onNext(@io.reactivex.annotations.NonNull ScriptFile file) {
|
||||||
if (file.isFile()) {
|
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_width="match_parent"
|
||||||
android:layout_height="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.support.design.widget.AppBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@android:color/transparent"
|
android:background="#5cab7d"
|
||||||
android:clipToPadding="false"
|
android:paddingTop="24px"
|
||||||
android:paddingTop="24dp"
|
|
||||||
android:theme="@style/AppTheme.AppBarOverlay">
|
android:theme="@style/AppTheme.AppBarOverlay">
|
||||||
|
|
||||||
|
|
||||||
<android.support.v7.widget.Toolbar
|
<android.support.v7.widget.Toolbar
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
android:title="@string/_app_name"
|
android:title="@string/_app_name"
|
||||||
app:popupTheme="@style/AppTheme.PopupOverlay">
|
app:layout_scrollFlags="scroll|enterAlways"
|
||||||
|
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>
|
|
||||||
|
|
||||||
<android.support.design.widget.TabLayout
|
<android.support.design.widget.TabLayout
|
||||||
android:id="@+id/tab"
|
android:id="@+id/tab"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="48dp"
|
android:layout_height="wrap_content"
|
||||||
app:tabGravity="fill"
|
app:tabGravity="fill"
|
||||||
app:tabIndicatorColor="@android:color/white"
|
app:tabIndicatorColor="@android:color/white"
|
||||||
app:tabMode="fixed"
|
app:tabMode="scrollable"/>
|
||||||
app:tabSelectedTextColor="@android:color/primary_text_dark"
|
|
||||||
app:tabTextColor="@android:color/secondary_text_dark"/>
|
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
<include
|
|
||||||
android:id="@+id/content_main"
|
<android.support.v4.view.ViewPager
|
||||||
layout="@layout/content_main"
|
android:id="@+id/viewpager"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
|
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
|
<com.stardust.widget.SlidingUpPanel
|
||||||
android:id="@+id/bottom_menu"
|
android:id="@+id/bottom_menu"
|
||||||
android:layout_width="match_parent"
|
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"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<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:id="@+id/swipe_refresh_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
@@ -8,4 +9,6 @@
|
|||||||
android:id="@+id/script_file_list"
|
android:id="@+id/script_file_list"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"/>
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
|
|
||||||
</android.support.v4.widget.SwipeRefreshLayout>
|
</android.support.v4.widget.SwipeRefreshLayout>
|
||||||
@@ -38,7 +38,11 @@ dependencies {
|
|||||||
compile 'com.github.hyb1996:DynamicLayoutInflator:0.1'
|
compile 'com.github.hyb1996:DynamicLayoutInflator:0.1'
|
||||||
compile 'org.greenrobot:eventbus:3.0.0'
|
compile 'org.greenrobot:eventbus:3.0.0'
|
||||||
compile 'net.lingala.zip4j:zip4j:1.3.2'
|
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'
|
compile 'com.github.hyb1996:EnhancedFloaty:0.17'
|
||||||
// Terminal emulator
|
// Terminal emulator
|
||||||
compile(name: 'libtermexec-release', ext: 'aar')
|
compile(name: 'libtermexec-release', ext: 'aar')
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ dependencies {
|
|||||||
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
|
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
|
||||||
exclude group: 'com.android.support', module: 'support-annotations'
|
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'
|
testCompile 'junit:junit:4.12'
|
||||||
compile project(':automator')
|
compile project(':automator')
|
||||||
compile project(':common')
|
compile project(':common')
|
||||||
|
|||||||
Reference in New Issue
Block a user