mirror of
https://github.com/beemdevelopment/Aegis.git
synced 2025-05-14 14:02:49 +00:00
Show/Hide action button depending on scroll direction
This commit is contained in:
parent
cebf15ba44
commit
a5778e6b38
2 changed files with 57 additions and 0 deletions
|
@ -1,6 +1,8 @@
|
||||||
package com.beemdevelopment.aegis.ui;
|
package com.beemdevelopment.aegis.ui;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
|
import android.animation.Animator;
|
||||||
|
import android.animation.AnimatorListenerAdapter;
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
@ -12,6 +14,9 @@ import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.SubMenu;
|
import android.view.SubMenu;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.animation.AccelerateInterpolator;
|
||||||
|
import android.view.animation.DecelerateInterpolator;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
@ -31,6 +36,9 @@ import com.beemdevelopment.aegis.db.DatabaseManagerException;
|
||||||
import com.beemdevelopment.aegis.db.DatabaseEntry;
|
import com.beemdevelopment.aegis.db.DatabaseEntry;
|
||||||
import com.beemdevelopment.aegis.db.DatabaseManager;
|
import com.beemdevelopment.aegis.db.DatabaseManager;
|
||||||
|
|
||||||
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
|
import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
|
||||||
|
|
||||||
public class MainActivity extends AegisActivity implements EntryListView.Listener {
|
public class MainActivity extends AegisActivity implements EntryListView.Listener {
|
||||||
// activity request codes
|
// activity request codes
|
||||||
private static final int CODE_SCAN = 0;
|
private static final int CODE_SCAN = 0;
|
||||||
|
@ -499,4 +507,39 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
public void onEntryChange(DatabaseEntry entry) {
|
public void onEntryChange(DatabaseEntry entry) {
|
||||||
saveDatabase();
|
saveDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isAnimating;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onScroll(int dx, int dy) {
|
||||||
|
if (dy > 0 && _fabMenu.getVisibility() == View.VISIBLE && !isAnimating) {
|
||||||
|
isAnimating = true;
|
||||||
|
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) _fabMenu.getLayoutParams();
|
||||||
|
int fabBottomMargin = lp.bottomMargin;
|
||||||
|
_fabMenu.animate()
|
||||||
|
.translationY(_fabMenu.getHeight() + fabBottomMargin)
|
||||||
|
.setInterpolator(new AccelerateInterpolator(2))
|
||||||
|
.setListener(new AnimatorListenerAdapter() {
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnd(Animator animation) {
|
||||||
|
isAnimating = false;
|
||||||
|
_fabMenu.setVisibility(View.INVISIBLE);
|
||||||
|
super.onAnimationEnd(animation);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
else if (dy < 0 && _fabMenu.getVisibility() != View.VISIBLE && !isAnimating) {
|
||||||
|
_fabMenu.setVisibility(View.VISIBLE);
|
||||||
|
_fabMenu.animate()
|
||||||
|
.translationY(0)
|
||||||
|
.setInterpolator(new DecelerateInterpolator(2))
|
||||||
|
.setListener(new AnimatorListenerAdapter() {
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnd(Animator animation) {
|
||||||
|
isAnimating = false;
|
||||||
|
super.onAnimationEnd(animation);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package com.beemdevelopment.aegis.ui.views;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
@ -33,6 +35,8 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
|
||||||
|
|
||||||
private UiRefresher _refresher;
|
private UiRefresher _refresher;
|
||||||
|
|
||||||
|
private RecyclerView.OnScrollChangeListener _onScrollListener;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -50,6 +54,14 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
|
||||||
|
|
||||||
// set up the recycler view
|
// set up the recycler view
|
||||||
_rvKeyProfiles = view.findViewById(R.id.rvKeyProfiles);
|
_rvKeyProfiles = view.findViewById(R.id.rvKeyProfiles);
|
||||||
|
_rvKeyProfiles.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
|
@Override
|
||||||
|
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||||
|
super.onScrolled(recyclerView, dx, dy);
|
||||||
|
_listener.onScroll(dx, dy);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(view.getContext());
|
LinearLayoutManager mLayoutManager = new LinearLayoutManager(view.getContext());
|
||||||
_rvKeyProfiles.setLayoutManager(mLayoutManager);
|
_rvKeyProfiles.setLayoutManager(mLayoutManager);
|
||||||
_touchCallback = new SimpleItemTouchHelperCallback(_adapter);
|
_touchCallback = new SimpleItemTouchHelperCallback(_adapter);
|
||||||
|
@ -199,5 +211,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
|
||||||
void onEntryMove(DatabaseEntry entry1, DatabaseEntry entry2);
|
void onEntryMove(DatabaseEntry entry1, DatabaseEntry entry2);
|
||||||
void onEntryDrop(DatabaseEntry entry);
|
void onEntryDrop(DatabaseEntry entry);
|
||||||
void onEntryChange(DatabaseEntry entry);
|
void onEntryChange(DatabaseEntry entry);
|
||||||
|
void onScroll(int dx, int dy);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue