gpt4 book ai didi

android - 如何检测在 CoordinatorLayout.Behavior 中停止的嵌套 Fling?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:31:13 34 4
gpt4 key购买 nike

如何使用 CoordinatorLayout.Behavior 检测嵌套 fling 是否完全停止?没有这样的 api 可以在 recycler view fling 完全停止时给我回调。

最佳答案

我在试图隐藏 Floating Action Button 时开始探索这个兔子洞(FAB) 当 RecyclerView正在滚动。根据多个 sources 执行此操作的正确方法是扩展FloatingActionButton.Behavior , 覆盖 onStartNestedScrollonStopNestedScroll方法,并将您的行为挂接到 FAB,例如app:layout_behavior="com.justingarrick.ui.ScrollAwareFabBehavior" .这适用于正常(慢速)滚动事件,但 onStopNestedScroll当一扔结束时不被调用。

目前,似乎有一些开放issues具有 throw 和滚动行为;我的解决方法是实现 OnScrollListener对于我的 RecyclerView 并以编程方式更改 FAB 的状态,例如

public class MyFragment extends Fragment {

@Bind(R.id.account_list) RecyclerView recyclerView;
@Bind(R.id.button_fab) FloatingActionButton fab;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_accounts, container, false);
ButterKnife.bind(this, view);

recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_DRAGGING)
fab.hide(); // or hideFab(), see below
else if (newState == RecyclerView.SCROLL_STATE_IDLE)
fab.show(); // or showFab(), see below
}
});

return view;
}
}

更新:这在 99% 的时间里都能正常工作,但如果您使用 show()hide()设计库版本 22.2.1 中的方法,当您尝试在 RecyclerView 的顶部向上滚动或在 RecyclerView 的底部向下滚动时,您会遇到问题,因为回收器 View 正在从 RecyclerView.SCROLL_STATE_DRAGGING 切换状态。至 RecyclerView.SCROLL_STATE_IDLE如此之快以至于它在 FloatingActionButtonHoneycombMr1#show() 中创建了竞争条件.所以,要解决这个问题(叹气),你要么需要切换到 setVisibility()如果您不关心动画,或者在没有竞争条件的情况下重新实现动画,则调用,例如

private void hideFab() {
fab.animate().scaleX(0.0F).scaleY(0.0F).alpha(0.0F).setDuration(200L).setInterpolator(new FastOutSlowInInterpolator()).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
fab.setVisibility(View.GONE);
}
});
}

private void showFab() {
fab.animate().scaleX(1.0F).scaleY(1.0F).alpha(1.0F).setDuration(200L).setInterpolator(new FastOutSlowInInterpolator()).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
fab.setVisibility(View.VISIBLE);
}
});
}

关于android - 如何检测在 CoordinatorLayout.Behavior 中停止的嵌套 Fling?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31000570/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com