关于使用自定义View FloatingButtonMenu,实现随同RecycleView滚动隐藏问题

If this cover violates your rights, please contact me

背景:最近为了完善音乐播放器的展现歌曲列表功能,选择在展开这方面的尝试。

对于非自定义VIew的FAB,其实可以选用CoordinatorLayout的Behavior进行配合,关于这方面的代码的实现可以选择在网上进行搜索,这里就不进行赘述。

实现方法选择对RecycleView进行下手,通过addOnScrollListener中的onScrolled实现

        @Override
        public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            yScrollSum += dy;
            if(yScrollSum > POINT && isFabMenuShow){
                hideFABAnimate(menu);
                isFabMenuShow = false;
                yScrollSum = 0;
            }else if(yScrollSum < -POINT/2 && !isFabMenuShow){
                showFABAnimate(menu);
                isFabMenuShow = true;
                yScrollSum = 0;
            }

            if(isFabMenuShow && dy>0 || (!isFabMenuShow && dy<0)){
                yScrollSum += dy;
            }

        }
        // FAB移出屏幕动画(隐藏动画)
	private void hideFABAnimate(FloatingActionMenu fab) {
    	    fab.animate().translationX(fab.getWidth()).setInterpolator(new AccelerateInterpolator(3)).start();
	}

		// FAB移入屏幕动画(显示动画)
	private void showFABAnimate(FloatingActionMenu fab) {
    	    fab.animate().translationX(0).setInterpolator(new OvershootInterpolator()).start();
	}

讲解一下思路,就是不断对dy进行求和,判断滑动了多少像素(?dy的单位应该是pixel,但是查询官方文档发现并没有申明单位是否为pixel,反而在SOF的早期回答中发现了)

当到达你设置的临界点像素(POINT),同时你的FAB是visible/invisible的,就可以启动隐藏/展示动画,然后重置SUM dy。