ScrollView顶部停靠

组件介绍

这个组件用于android项目中,实现子View在滑动到顶部后,停在最顶部,不再滑动。

动态图

pinnedheader.gif

使用场景

适用于滑动布局中,希望菜单栏或者导航栏不滑出屏幕。

如何使用

第一步:初始化控件

layout = (PinnedHeaderLayout) findViewById(R.id.layout);//最外层布局,包裹着PinnedHeaderScrollView
        headView1 = (LinearLayout) findViewById(R.id.headView);//指定的headerView
        container1 = (LinearLayout) findViewById(R.id.container);//headerView的父控件
        topView = (RelativeLayout) findViewById(R.id.topView);

第二步:加载数据源

PinnedHeaderViewInfo,用来存放headerView的各种信息
setParent:headerView在原布局中父控件
setHeight:headerView的高度
setView:指定headerView
setTopDistance:headerView距离顶部的距离
PinnedHeaderViewInfo info = new PinnedHeaderViewInfo();
info.setParent(container1);
info.setHeight(headView1.getMeasuredHeight());
info.setView(headView1);
info.setTopDistance(topView.getBottom());
ArrayList mData = new ArrayList();
mData.add(info);
layout.setData(mData);//将数据传入PinnedHeaderLayout

实现原理

PinnedHeaderLayout继承至FrameLayout,会自动加载一个LinerLayout子View,这个LinerLayout用来装载headerView,通过监听PinnedHeaderScrollView的滑动,将headerView在该LinerLayout和headerView的原父控件之间 add和remove。

TODO

优化设置headerView的方法,将高度和距离计算交给PinnedHeaderScrollView

版本控制

版本号 更新内容 修改人 修改时间
1.0 初次发布 lucky_tiger 2017/7/6

项目地址

所在文件夹 demo位置
widget.FixScrollView com.qr.demo.widget.fixscrollview.FixScrollViewActivity

你可能感兴趣的:(ScrollView顶部停靠)