原文链接:http://www.jianshu.com/p/3bf26722c489

StickyHeaderListView是基于实际需求做出的灵活可定制的UI功能,具体实现功能如下:

一、支持无限循环的广告位。
二、高度可动态配置的Header2和Header3(使用GridView实现)。
三、主要功能:分类、排序和筛选布局滑动到顶部后吸附、悬停。
四、自定义FilterView筛选控件,支持动画显示与动画隐藏。
五、支持标题栏背景颜色渐变、字体颜色渐变。
六、数据不足一屏动态添加空数据占位。
七、数据为空时,ListView加载暂无数据视图。
八、思路清晰、界面优美,添加ripple点击效果。
九、支持下拉刷新和上拉加载更多功能。

动态效果图:

实现思路

StickyHeaderListView 主要是通过 ListView 添加头部实现,将复杂的头部分解为若干部分,如下图:Header 1(广告位)、Header 2(频道位)、Header 3(运营位)、Header 4(分割线) 和 Header 5(筛选头部),这样各个Header部分的UI和逻辑可以单独拿出去处理,具体可以参考我的 开源代码。

Header 1: 它的高度影响标题栏的颜色渐变。

Header 2: 使用GridView实现,自定义FixedGridView,高度不受ListView的影响,一行显示几个自己可以根据需求设置。

Header 3: 和Header 2一样的实现方式,要注意的地方就是分割线的设置,我实现的思路是设置GridView的背景颜色的分割线的颜色,再设置如下的四个属性:paddingTop、paddingBottom、horizontalSpacing、verticalSpacing为1px,这样分割线就均等了。

android:background="@color/font_black_5"
android:paddingTop="1px"
android:paddingBottom="1px"
android:horizontalSpacing="1px"
android:verticalSpacing="1px"

Header 4: 这个头部布局是需求上的,UI加上整体更加好看,为什么我要单独拿出来,主要考虑到以下的原因:如果让Header 5达到吸附悬停的效果,需要知道Header 5到顶部的距离,如果把分割线加到Header 5上,那在移动的时候还需要减去这个高度;而如果加到Header 3上,Header 3是服务器动态配置的,如果没有Header 3的头部怎么办,那就加到Header 2上等,这样逻辑就比较麻烦,干脆我直接单独拿出来,作为一个头部布局动态添加。

Header 5: 这个筛选头部是个假的布局,主要处理未吸附悬停时的点击事件,点击之后滑动到顶部这时顶部的隐藏的筛选布局显示出来达到吸附悬停的效果。同时我将这个筛选布局定义一个 FilterView,将分类、排序和筛选的UI处理和逻辑封装起来,方便其它页面的二次使用。

还有两点需要特别注意:

一、如果数据不满一屏,比如就一条数据,那点击筛选它是没办法滑动到顶部的,因为她的高度不够,我的解决方法是添加若干个空数据,空数据的size是根据实际一屏要显示的个数减去现在的个数,这样可以达到整体可以滑动的高度,参考 TravelingAdapter 文件。

二、如果数据为空时并且我还需要无数据的占位图,如果在 ListView 底部加上无数据的布局这样的效果是不好的,所以我还在这个Adapter上做文章,让它加载一个无数据的视图布局,同样参考 TravelingAdapter 文件,每一个Item的高度: height = 屏幕的高度 - 标题栏高度 - 筛选View高度,这样设置一个这样的高度的Adapter,再 notifyDataSetChanged() 一下,整体的视图不会变化,无数据的占位图也自然而然的显示了。

最后

具体实现代码移步 GitHub,下载 APK 体验,感谢你的关注,欢迎star,希望对你有帮助,如遇到问题请联系我,最后再贴几张截图方便你查看。

滑动到一半时标题栏渐变

滑动到顶部,FilterView 吸附悬停

FilterView 动画显示与隐藏

数据为空时的占位图

Android 开源之StickyHeaderListView 标题渐变、吸附悬停、筛选分类、动态头部相关推荐

  1. Android悬浮按钮锚点位置,Android 滑动定位+吸附悬停效果实现

    在前两篇文章中,分别介绍了tablayout+scrollview 和 tablayout+recyclerview 实现的滑动定位的功能,文章链接: Android 实现锚点定位 Android t ...

  2. android实现3种定位的切换,Android 滑动定位+吸附悬停效果实现

    在前两篇文章中,分别介绍了tablayout+scrollview 和 tablayout+recyclerview 实现的滑动定位的功能,文章链接: Android 实现锚点定位 Android t ...

  3. Android 开源组件和第三方库汇总

    出自(https://github.com/Tim9Liu9/TimLiu-Android) TimLiu-Android 自己总结的Android开源项目及库. 1. github排名 https: ...

  4. Android开源项目以及开源库集合(持续更新中)

    UI Awesome-MaterialDesign – MaterialDesignCenter改名为Awesome-MaterialDesign,优化了布局,新增了不少库. awesome-andr ...

  5. 2017年Android开源项目及依赖库

    目录(?)[+] github排名: https://github.com/trending , github搜索: https://github.com/search UI Awesome-Mate ...

  6. GitHub中Android开源项目及库汇总

    几个常用网站: github排名: https://github.com/trending , github搜索: https://github.com/search codeKK   :    ht ...

  7. Android 开源UI框架汇总

    1. github排名 https://github.com/trending,github搜索:https://github.com/search 2.https://github.com/wasa ...

  8. Android 第三方库--2017年Android开源项目及库汇总

    转自:http://blog.csdn.net/jsonnan/article/details/62215287 东西有点多,但是资源绝对nice,自己都全部亲身体验过了,大家可放心使用 github ...

  9. 转载GitHub中Android开源项目及库汇总

    转自:https://blog.csdn.net/u013472738/article/details/78153077 几个常用网站: github排名: https://github.com/tr ...

最新文章

  1. LeetCode 613. Shortest Distance in a Line --SQL
  2. 使用VMware VSphere WebService SDK进行开发 (三)——获取主机(HostSystem)的基本信息
  3. 现代软件工程 作业 原型设计
  4. mysql5.7.21备份脚本_Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本
  5. Linux 手势识别,基于嵌入式Linux的手势识别技术研究
  6. I - Defeat the Enemy UVALive - 7146 二分 + 贪心
  7. input美化上传按钮美化
  8. dw显示云服务器的数据库,dw如何读取服务器数据库
  9. linux 设置自动定时清理日志
  10. Cfree5可以JAVA_Free C++ (and C)
  11. 毁三观:妻妹把我压身下
  12. EVA改进(点锐度算法)图像清晰度评价方法C++实现
  13. 软件测试周刊(第10期): 大质量
  14. 力扣539题 最小时间差
  15. Kettle5.2 Carte.bat 页面中文乱码
  16. 携程回应大数据杀熟并致歉 二次支付无票是系统Bug
  17. 网页字体单位px、em、%、rem、pt、vm、vh介绍
  18. 直播源代码图片验证码
  19. 谈谈个人网站的建立(七)—— 那些建站必备的插件
  20. 生成10位由大小写字母和数字组成的随机激活码

热门文章

  1. 关闭不安全端口的脚步
  2. Qt的Oracle数据库QOCI驱动问题
  3. Django中使用Celery
  4. antd menu收缩时二级菜单不跟随的问题。
  5. java算法之冒泡排序法
  6. Blackey win10 + python3.6 + VSCode + tensorflow-gpu + keras + cuda8 + cuDN6N环境配置(转载)
  7. YII1 MVC初认识(二)
  8. 支持多个版本的ASP.NET Core Web API
  9. 八大排序算法的java实现
  10. mysql select 1