diff options
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.java | 29 |
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())); + } +} |