CoordinatorLayout+AppBarLayout 布局方式下的一键滚动到顶部的实现

首先是布局

CoordinatorLayout嵌套AppBarLayout,滚动的头部都应该放在AppBarLayout里面,并使用app:layout_scrollFlags="scroll",
下面跟随滚动的使用app:layout_behavior="@string/appbar_scrolling_view_behavior"

代码如下:



    

        

            

                

                

                    

                        

                        

                        
                    

                    

                        

                        

                        

                        
                    
                
            
        
    

    

下面说如何一键滚动回到顶部

public void scrollToTop() {
    //拿到 appbar 的 behavior,让 appbar 滚动
    ViewGroup.LayoutParams layoutParams = appBarLayout.getLayoutParams();
    CoordinatorLayout.Behavior behavior =
            ((CoordinatorLayout.LayoutParams) layoutParams).getBehavior();
    if (behavior instanceof AppBarLayout.Behavior) {
        AppBarLayout.Behavior appBarLayoutBehavior = (AppBarLayout.Behavior) behavior;
        //拿到下方tabs的y坐标,即为我要的偏移量
        float y = noContainer.getY();
        //注意传递负值
        appBarLayoutBehavior.setTopAndBottomOffset((int) -y);
    }
}

//监听滚动

appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
    @Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
        if (Math.abs(verticalOffset) == appBarLayout.getTotalScrollRange()) {
            iv_scroll_to_top.setVisibility(View.VISIBLE);
        } else {
            iv_scroll_to_top.setVisibility(View.GONE);
        }
    }
});

 

 

 

你可能感兴趣的:(Android,我的学习分享)