aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenuRecyclerViewScrollListener.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenuRecyclerViewScrollListener.java')
-rw-r--r--app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenuRecyclerViewScrollListener.java29
1 files changed, 29 insertions, 0 deletions
diff --git a/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenuRecyclerViewScrollListener.java b/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenuRecyclerViewScrollListener.java
new file mode 100644
index 00000000..f526d6e8
--- /dev/null
+++ b/app/src/main/java/com/wireguard/android/widget/fab/FloatingActionsMenuRecyclerViewScrollListener.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright © 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.wireguard.android.widget.fab;
+
+import android.support.v7.widget.RecyclerView;
+
+import com.wireguard.android.R;
+
+public class FloatingActionsMenuRecyclerViewScrollListener extends RecyclerView.OnScrollListener {
+ private static final float SCALE_FACTOR = 1.5f;
+ private final FloatingActionsMenu menu;
+
+ public FloatingActionsMenuRecyclerViewScrollListener(final FloatingActionsMenu menu) {
+ this.menu = menu;
+ }
+
+ private static float bound(float min, float proposal, float max) {
+ return Math.min(max, Math.max(min, proposal));
+ }
+
+ @Override
+ public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) {
+ super.onScrolled(recyclerView, dx, dy);
+ menu.setScrollYTranslation(bound(0, menu.getScrollYTranslation() + dy * SCALE_FACTOR, menu.getMeasuredHeight() - menu.getTranslationY()));
+ }
+}