Skip to content

Instantly share code, notes, and snippets.

@bubbleguuum
Created May 17, 2018 16:32
Show Gist options
  • Save bubbleguuum/6a46e799cc6fa37546f4dd91a5a45a6e to your computer and use it in GitHub Desktop.
Save bubbleguuum/6a46e799cc6fa37546f4dd91a5a45a6e to your computer and use it in GitHub Desktop.
package com.blargh.android.utils;
import java.util.logging.Logger;
import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
public class BottomNavigationBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
final private static Logger log = Logger.getLogger(BottomNavigationBehavior.class.getName());
public BottomNavigationBehavior (Context context, AttributeSet attrs) {
super(context, attrs);
}
public BottomNavigationBehavior () {
super();
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, V child, View directTargetChild,
View target, int axes, int type) {
return axes == ViewCompat.SCROLL_AXIS_VERTICAL;
}
@Override
public void onNestedPreScroll (CoordinatorLayout coordinatorLayout,
V child,
View target,
int dx,
int dy,
int[] consumed,
int type) {
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
child.setTranslationY(Math.max(0f, Math.min(child.getHeight(), child.getTranslationY() + dy)));
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency) {
if(dependency instanceof Snackbar.SnackbarLayout) {
updateSnackbar(child, (Snackbar.SnackbarLayout)dependency);
}
return super.layoutDependsOn(parent, child, dependency);
}
private void updateSnackbar(View child, Snackbar.SnackbarLayout snackbarLayout) {
if(snackbarLayout.getLayoutParams() instanceof CoordinatorLayout.LayoutParams) {
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams)snackbarLayout.getLayoutParams();
params.setAnchorId(child.getId());
params.anchorGravity = Gravity.TOP;
params.gravity = Gravity.TOP;
snackbarLayout.setLayoutParams(params);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment