先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数,关注数这一部分)在滑动到顶端的时候不消失,而是停留在整个界面头部。
我们先分析要解决的问题:
【Android项目实战(浅谈ListView悬浮头部展现效果)】1、如何实现列表ListView顶部视图跟随ListView一起滑动
2、如何实现滑动过程中需要停留在顶部的视图
解决:
第一个问题,实现ListView与顶部视图一起滑动,ListView提供一个方法,addHeadView(View);
意思就是在ListView顶部添加一个View。那么这个View就能和ListView一起滚动。
第二个问题,怎么保证界面中间的某一部分视图滑动到顶部的时候停留在顶部呢?
首先我们这个停留在顶部的View(称为View1)是ListView.addHeadView()上去的,即滑动列表,这个View1会划出去,那么如何让它不划出去?只要在Listview所在布局最上方
也写一个同样的View(称为View2,View2和ListView同属于一个FragmentLayout)并先隐藏(Visible = 'gone'),当View1刚划出顶部的时候,View2显示。
View1刚划出顶部的时机就是:
当滑动时 firstVisibleItem>=要悬浮的 item的position时 让View2显示 ,否则隐藏。
代码实现:
首先布局文件:
头部布局:
1
2
8
14
要停留在顶部的View布局:(这里是要停留在顶部的View,这里addHeadView到ListView顶部,跟随者ListView滑动到顶部消失,这时满足firstVisibleItem>=要悬浮的 item的position条件,主界面里在写一个相同的View显示即可)
主布局:
java代码:
1 private LinearLayout invis;
2private ListView lv;
3String[] strs;
4@Override
5protected void onCreate(Bundle savedInstanceState) {
6super.onCreate(savedInstanceState);
7setContentView(R.layout.activity_main);
8
9invis = (LinearLayout) findViewById(R.id.invis);
10
11strs = new String[100];
12
13for (int i = 0;
i < 20;
i++) {
14strs[i] = "data-----" + i;
15}
16
17lv = (ListView) findViewById(R.id.lv);
18View header = View.inflate(this, R.layout.stick_header, null);
//头部内容
19lv.addHeaderView(header);
//添加头部
20
21lv.addHeaderView(View.inflate(this, R.layout.stick_action, null));
//ListView条目中的悬浮部分 添加到头部
22
23lv.setAdapter(new ArrayAdapter(this,
24android.R.layout.simple_list_item_1, strs));
25lv.setOnScrollListener(new AbsListView.OnScrollListener() {
26
27@Override
28public void onScrollStateChanged(AbsListView view, int scrollState) {
29
30}
31
32@Override
33public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
34if (firstVisibleItem >= 1) {
35invis.setVisibility(View.VISIBLE);
36} else {
37
38invis.setVisibility(View.GONE);
39}
40}
41});
42
43}
相关教程 Android基础系列教程:
Android基础课程U-小结_哔哩哔哩_bilibili
Android基础课程UI-布局_哔哩哔哩_bilibili
Android基础课程UI-控件_哔哩哔哩_bilibili
Android基础课程UI-动画_哔哩哔哩_bilibili
Android基础课程-activity的使用_哔哩哔哩_bilibili
Android基础课程-Fragment使用方法_哔哩哔哩_bilibili
Android基础课程-热修复/热更新技术原理_哔哩哔哩_bilibili
本文转自 https://juejin.cn/post/7053062012112207903,如有侵权,请联系删除。
推荐阅读
- 备战金三银四,没有这套逆天的Android面经怎么行()
- 如何学习Flutter(学会这些你就入门了)
- 音视频人才的需求从小众变成了大众(一名合格的音视频开发人员,少则30万起,多则年薪可达百万以上......)
- 什么是“好”的技术(为什么“火”?)
- 什么是音频焦点管理(音频焦点的行为准则是什么?)
- 知乎热议(35岁的中年危机,大龄程序员该何去何从())
- 安卓点击防抖优化手册(非代码层指导)
- 太卷了,公司新来的00后卷王,我们这帮老油条真干不过.....
- 那些年,被我们误解的程序员