如何在用户到达底部时显示 FloatingActionButton?
How to show FloatingActionButton when the user reaches the bottom?
我在 CoordinatorLayout 中使用 FloatingActionButton,但与正常行为不同的是,我想在到达底部时显示它,以便让用户看到更多数据。
为此,我在 Internet 上找到了该组件的行为。
public class ScrollingFABBehavior extends FloatingActionButton.Behavior {
private int toolbarHeight;
public ScrollingFABBehavior(Context context, AttributeSet attrs) {
super();
this.toolbarHeight = Utils.getToolbarHeight(context);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton fab, View dependency) {
return super.layoutDependsOn(parent, fab, dependency) || (dependency instanceof AppBarLayout);
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton fab, View dependency) {
boolean returnValue = super.onDependentViewChanged(parent, fab, dependency);
if (dependency instanceof AppBarLayout) {
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
int fabBottomMargin = lp.bottomMargin;
int distanceToScroll = fab.getHeight() + fabBottomMargin;
float ratio = (float)dependency.getY()/(float)toolbarHeight;
fab.setTranslationY(-distanceToScroll * ratio);
}
return returnValue;
}
不幸的是,我不知道该怎么做。我一直在玩 fab.setTranslationY()
但没有成功。
任何人都可以告诉我任何方法吗?
编辑:我正在使用 mzgreen 示例:https://github.com/mzgreen/HideOnScrollExample
我在使用 makovastar 示例 (https://github.com/makovkastar/FloatingActionButton) 时遇到了同样的问题。
This 回答让我找到了解决方案。
FloatingActionButton.java(FloatingActionButton#AbsListViewScrollDetectorImpl)里面有一个内在的class实现了滚动方法。
在onScroll方法中添加如下代码即可:
if (view.getLastVisiblePosition() == view.getAdapter().getCount() -1 &&
view.getChildAt(view.getChildCount() - 1).getBottom() <= view.getHeight()){
//It is scrolled all the way down here so we show the button
show();
}
else hide();
希望有用!
我在 CoordinatorLayout 中使用 FloatingActionButton,但与正常行为不同的是,我想在到达底部时显示它,以便让用户看到更多数据。
为此,我在 Internet 上找到了该组件的行为。
public class ScrollingFABBehavior extends FloatingActionButton.Behavior {
private int toolbarHeight;
public ScrollingFABBehavior(Context context, AttributeSet attrs) {
super();
this.toolbarHeight = Utils.getToolbarHeight(context);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton fab, View dependency) {
return super.layoutDependsOn(parent, fab, dependency) || (dependency instanceof AppBarLayout);
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton fab, View dependency) {
boolean returnValue = super.onDependentViewChanged(parent, fab, dependency);
if (dependency instanceof AppBarLayout) {
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
int fabBottomMargin = lp.bottomMargin;
int distanceToScroll = fab.getHeight() + fabBottomMargin;
float ratio = (float)dependency.getY()/(float)toolbarHeight;
fab.setTranslationY(-distanceToScroll * ratio);
}
return returnValue;
}
不幸的是,我不知道该怎么做。我一直在玩 fab.setTranslationY()
但没有成功。
任何人都可以告诉我任何方法吗?
编辑:我正在使用 mzgreen 示例:https://github.com/mzgreen/HideOnScrollExample
我在使用 makovastar 示例 (https://github.com/makovkastar/FloatingActionButton) 时遇到了同样的问题。 This 回答让我找到了解决方案。
FloatingActionButton.java(FloatingActionButton#AbsListViewScrollDetectorImpl)里面有一个内在的class实现了滚动方法。
在onScroll方法中添加如下代码即可:
if (view.getLastVisiblePosition() == view.getAdapter().getCount() -1 &&
view.getChildAt(view.getChildCount() - 1).getBottom() <= view.getHeight()){
//It is scrolled all the way down here so we show the button
show();
}
else hide();
希望有用!