drl*_*obo 39 android material-design floating-action-button android-design-library
谷歌已经发布了我正在使用的设计库
compile 'com.android.support:design:22.2.1'
Run Code Online (Sandbox Code Playgroud)
但是,我无法看到任何代码示例,说明如何使用此库以及如何FAB
在滚动条上设置动画.我想我可以在上面监听滚动事件ListView
,然后自己动画按钮,但是这不是API(这不是这个支持库的重点).
有这样的例子吗?
toc*_*kov 97
如果您正在使用RecyclerView
并且您正在寻找简单的东西,您可以尝试这样做:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy){
if (dy > 0)
fabAddNew.hide();
else if (dy < 0)
fabAddNew.show();
}
});
Run Code Online (Sandbox Code Playgroud)
通过替换0
常数,您可以调整触发的灵敏度,提供更流畅的体验
ian*_*ake 45
使用自定义CoordinatorLayout.Behavior可以轻松地使组件对滚动事件做出反应,因为它们会在您重写onStartNestedScroll()时自动接收滚动事件.
在cheesesquare之上构建的FABAwareScrollingViewBehavior中隐藏并显示滚动FAB 的示例:
public class FABAwareScrollingViewBehavior
extends AppBarLayout.ScrollingViewBehavior {
public FABAwareScrollingViewBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent,
View child, View dependency) {
return super.layoutDependsOn(parent, child, dependency) ||
dependency instanceof FloatingActionButton;
}
@Override
public boolean onStartNestedScroll(
final CoordinatorLayout coordinatorLayout, final View child,
final View directTargetChild, final View target,
final int nestedScrollAxes) {
// Ensure we react to vertical scrolling
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
|| super.onStartNestedScroll(coordinatorLayout, child,
directTargetChild, target, nestedScrollAxes);
}
@Override
public void onNestedScroll(
final CoordinatorLayout coordinatorLayout, final View child,
final View target, final int dxConsumed, final int dyConsumed,
final int dxUnconsumed, final int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target,
dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
if (dyConsumed > 0) {
// User scrolled down -> hide the FAB
List<View> dependencies = coordinatorLayout.getDependencies(child);
for (View view : dependencies) {
if (view instanceof FloatingActionButton) {
((FloatingActionButton) view).hide();
}
}
} else if (dyConsumed < 0) {
// User scrolled up -> show the FAB
List<View> dependencies = coordinatorLayout.getDependencies(child);
for (View view : dependencies) {
if (view instanceof FloatingActionButton) {
((FloatingActionButton) view).show();
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
滚动视图的位置app:layout_behavior="com.support.android.designlibdemo.FABAwareScrollingViewBehavior"
而不是app:layout_behavior="@string/appbar_scrolling_view_behavior"
但是,如果需要,您可以替换hide()
并show()
执行任何操作.这个是怎么做的详细信息中可以找到这个职位和跟进职位v22.2.1和跟进职位v25.1.0.
请注意,这与设计库的所有滚动行为一样,要求您的视图支持嵌套滚动,目前这种滚动限制为NestedScrollView,RecyclerView - ListView
并且ScrollView
仅适用于API21 +设备.
小智 9
如果你没有使用RecycleView(也就是普通的ScrollView),那么这就可以了:
mScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
if (mScrollView.getScrollY() > oldScrollYPostion) {
fab.hide();
} else if (mScrollView.getScrollY() < oldScrollYPostion || mScrollView.getScrollY() <= 0) {
fab.show();
}
oldScrollYPostion = mScrollView.getScrollY();
}
});
Run Code Online (Sandbox Code Playgroud)
别忘了申报:
private int oldScrollYPostion = 0;
Run Code Online (Sandbox Code Playgroud)
在你的课堂里.
app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
app:layout_anchor="@id/recyclerList"
app:layout_anchorGravity="bottom"
Run Code Online (Sandbox Code Playgroud)
这对我来说很有效,FAB 和 RecyclerView 都是协调器上的直接子级。
归档时间: |
|
查看次数: |
31973 次 |
最近记录: |