Android 简单实现ListView顶部悬浮效果

构建悬浮顶部ListView的Android开发技巧 本文还有配套的精品资源,点击获取 简介:在Android应用中,实现ListView组件的顶部悬浮效果能够提升用户体验,使得关键信息始终可访问。这种设计在具有导航功能或突出显示内容的界面中尤其常见。本文将介绍几种实现ListView顶部悬浮的方法,包括自定义Adapter实现StickyHeader效果,嵌套使用两个ListView,以及如何进行性能优化和兼容性测试。还会讨... 阅读详情

起初在网上搜了下实现这样的效果,美团网,大众点评的“购买框”悬浮效果也是这样的,不过作者实现比较麻烦,自己想了想就根据ListView提供的一些特性进行了简单实现。

整个主要布局就是一个ListView,如果listview的上面有内容且高度比较高,可以把它当做listview的header,这样也可以避免ScrollView嵌套ListView带来的麻烦(记住这一点就不会在平时出现ScrollView与ListView各种问题了)。要实现悬浮效果,主要是根据ListView可见的第一个条目是哪个条目来操作的。注意这里的“悬浮”其实只是通过 隐藏/显示 悬浮部分来实现:在ListView“背后”有一个隐藏的“悬浮部分”,当ListView条目中的悬浮部分成为ListView可见部分第一个时,这时非ListView条目中的悬浮部分显示出来,这样造成“悬浮”部分一直在顶部浮动,当ListView可见部分第一个条目并不是悬浮时,非ListView那部分“隐藏部分”继续隐藏。表达能力不强,自己都快被自己绕晕了,总之就是2个悬浮部分:ListView条目中的和处于布局顶部隐藏(Gone/invisible)的起初未显示的,通过这两部分的操作来完成整个功能的。希望读者能够理解……

主要代码:

  1. @Override  
  2.     protected void onCreate(Bundle savedInstanceState) {  
  3.         super.onCreate(savedInstanceState);  
  4.         setContentView(R.layout.activity_sticky);  
  5.         invis = (LinearLayout) findViewById(R.id.invis);  
  6.   
  7.         strs = new String[100];  
  8.   
  9.         for (int i = 0; i < 20; i++) {  
  10.             strs[i] = "data-----" + i;  
  11.         }  
  12.   
  13.         lv = (ListView) findViewById(R.id.lv);  
  14.         View header = View.inflate(this, R.layout.stick_header, null);//头部内容  
  15.         lv.addHeaderView(header);//添加头部  
  16.         lv.addHeaderView(View.inflate(this, R.layout.stick_action, null));//ListView条目中的悬浮部分 添加到头部  
  17.   
  18.         lv.setAdapter(new ArrayAdapter<String>(this,  
  19.                 android.R.layout.simple_list_item_1, strs));  
  20.         lv.setOnScrollListener(new OnScrollListener() {  
  21.   
  22.             @Override  
  23.             public void onScrollStateChanged(AbsListView view, int scrollState) {  
  24.   
  25.             }  
  26.   
  27.             @Override  
  28.             public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {  
  29.                 if (firstVisibleItem >= 1) {  
  30.                     invis.setVisibility(View.VISIBLE);  
  31.                 } else {  
  32.   
  33.                     invis.setVisibility(View.GONE);  
  34.                 }  
  35.             }  
  36.         });  
  37.     }  


布局:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent" >  
  5.   
  6.     <TextView  
  7.         android:id="@+id/title"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="30dp"  
  10.         android:background="#332b3b"  
  11.         android:gravity="center"  
  12.         android:text="标题"  
  13.         android:textColor="#ffffff" />  
  14.   
  15.     <FrameLayout  
  16.         android:layout_width="match_parent"  
  17.         android:layout_height="wrap_content"  
  18.         android:layout_below="@id/title" >  
  19.   
  20.         <ListView  
  21.             android:id="@+id/lv"  
  22.             android:layout_width="match_parent"  
  23.             android:layout_height="match_parent" />  
  24.   
  25.         <LinearLayout  
  26.             android:id="@+id/invis"  
  27.             android:layout_width="fill_parent"  
  28.             android:layout_height="50dp"  
  29.             android:background="#ccedc7"  
  30.             android:orientation="horizontal"  
  31.             android:visibility="gone" >  
  32.   
  33.             <TextView  
  34.                 android:id="@+id/tv"  
  35.                 android:layout_width="match_parent"  
  36.                 android:layout_height="50dp"  
  37.                 android:gravity="center"  
  38.                 android:text="悬浮部分" />  
  39.         </LinearLayout>  
  40.     </FrameLayout>  
  41.   
  42. </RelativeLayout> 


原文地址:http://blog.youkuaiyun.com/ljfbest/article/details/38765641

全网唯一OpenCyphal/UAVCAN教程(8)libcanard介绍 当Cyphal里,这个结构体代表一条完整的Cyphal消息,之后我们会根据metadata里提供的元信息,其实就是消息ID,调用对应的反序列化函数,将payload还原成具体的Cyphal消息。用于构造一个新的发送队列,原则上一个can物理接口需要分配一个发送队列,如果它们的MTU大小一致,是可以共用一条的。这个库不包含IO层,是平台无关的,意义是没有实现具体的数据收发,仅提供将发送出去的Cyphal消息转成can帧,以及将收到的can帧转成Cyphal消息。返回值是这条消息拆解成的can帧的数目。.... 阅读详情

相关推荐

C语言 函数

一、什么是函数 二、函数的相关语法 三、函数编码规范

m0_57105760的博客 1890

【UI特效】FrameLayout实现ListView顶部悬停效果

首先上效果图,实现如下效果: 起初在网上搜了下实现这样的效果,美团网,大众点评的“购买框”悬浮效果也是这样的,不过作者实现比较麻烦,自己想了想就根据ListView提供的一些特性进行了简单实现。 整个主要布局就是一个ListView,如果listview的上面有内容且高度比较高,可以把它当做listview的header,这样也可以避免ScrollV

会一切 3802

Cadence IC618/Spectre231安装避坑指南:详解环境变量配置与License管理那些事儿

本文深入解析Cadence IC618/Spectre231安装过程中的环境变量配置与License管理难题,提供从变量冲突解决到高效License管理的实用方案。针对常见的64位标识冲突、路径污染及License服务器连接问题,给出具体诊断步骤和优化建议,帮助用户构建稳定可靠的EDA环境。

weixin_33737134的博客 615

【Android】跟着chatGPT学习悬浮窗的实现

需要注意的是,使用 WindowManager.LayoutParams.WRAP_CONTENT 作为悬浮窗口的宽度或高度时,需要确保悬浮窗口内部的视图内容已经正确地布局和测量完成,否则悬浮窗口可能会显示异常。同时,我们将悬浮窗口的高度设置为 200dp,以确保悬浮窗口在高度上有一定的大小。在这个示例代码中,我们将更新悬浮窗口的布局放在了拖动事件的处理中,如果需要在其它地方更新悬浮窗口的布局,也可以使用同样的方式调用 WindowManager.updateViewLayout() 方法。

aaajj的专栏 2296

pcb印刷电路缺陷检测----数据集准备

PKU-Market-PCB 印刷电路板 (PCB) 瑕疵数据集是一个公共合成 PCB 数据集,包含 1,386 张图像,具有 6 种缺陷(漏孔、鼠咬、开路、短路、杂散、杂铜),可用于图像检测、分类和配准任务。

qq_30190551的博客 4420

Ubuntu服务器通过IPV6端口转发搭建幻兽帕鲁私服实战

本文详细介绍了在Ubuntu服务器上通过IPV6端口转发搭建幻兽帕鲁私服的完整教程。针对只有公网IPV6地址的服务器环境,提供了从硬件检查、端口转发工具配置到游戏服务器安装的全流程解决方案,帮助玩家轻松实现多人联机游戏体验。

weixin_30652491的博客 489

Android开发笔记 自定义悬浮窗

WindowManager 在前面《 Android开发笔记(六十六)自定义对话框》中,我们提到每个页面都是一个Window窗口,许多的Window对象需要一个管家来打理,这个管家我们称之为WindowManager窗口管理。在手机屏幕上新增或删除页面窗口,都可以归结为WindowManager的操作,下面是该管理类的常用方法说明: getDefaultDisplay : 获取默认的显示屏信息。通常用该方法获取屏幕分辨率,详情参见《 Android开发笔记(三)屏幕分辨率》。 addView : 往窗口添

weixin_42602900的博客 2378

Altium Designer(AD24/25)PCB编辑的几种方法介绍

本文介绍了Altium Designer(AD24/25)软件中PCB编辑的四种操作方法:1)通过菜单栏"Place→Component"激活;2)点击工具栏元器件图标;3)右键快捷菜单选择;4)快捷键P+C组合操作。建议初学者先通过菜单栏和快捷菜单熟悉操作,熟练后转为工具栏和快捷键以提高效率。文章配有操作示意图,帮助用户快速掌握PCB元器件放置技巧。

fydar的博客 936

浮窗中addView()不显示 分析思路

看得到的真相往往可能是骗人的,但是代码不会. 如果程序中出现了”灵异”事件,一定是问题没有分析到位,亦或是分析问题的方向出错 最近在项目中,我需要在一个独立进程的不死服务中打开一个浮窗,但是浮窗不显示.但是在Activity中可以打开浮窗.这是问题的表现,其中不同点是创建WindowManager的Context不同,使用Activity的Context可以,使用Service和A...

qq_26585943的博客 5531

【软考高级系统架构论文】论微服务架构及其应用

本文围绕“论微服务架构及其应用”展开论述。首先概要介绍了本人参与的某公司线上电子商务平台项目,在其中担任系统架构设计师。接着分析了微服务架构相较于单块架构的特点,如模块化与组件化、技术栈多样性、独立部署与扩展、高度容错与可用性等。最后结合项目阐述了软件架构对微服务模式的采用情况,以及实施过程中遇到的问题及解决方案,如服务划分粒度、数据一致性、监控与故障排查等问题,并给出了相应解决办法。

qq837993702的博客 225

从Safety Manual到系统安全概念

本文系统阐述了构建功能安全"证据链"的工程化方法论,核心要点包括:1)建立"风险→对策→验证→证据"闭环链条;2)SafetyManual和FMEDA作为关键证据支撑点,前者界定系统安全边界,后者量化诊断覆盖率;3)通过四步法继承芯片安全机制并扩展至系统级;4)形成"设计-分析-验证"三维闭环体系,包括安全目标、技术实现和验证矩阵;5)强调证据链闭环对安全认证和OEM认可的重要性。该方法论实现了从理论要求到工程实践的完整转化,确保安全设计可验证、可

VehSwHwDeveloper的博客 719

【Android -- UI 开发】RecyclerView 实现顶部悬浮效果

本文介绍了 Android RecyclerView 悬浮效果

Kevin Learn Android 1745

【补充篇】三万字了解AUTOSAR软件架构(一)

主要讲解了AUTOSAR软件架构的分层及各个栈的作用

weixin_47571898的博客 1116

几种实现ListView顶部悬浮效果

顶部悬浮,这个是老生常谈的控件,一搜索网上大篇幅的介绍,有几种实现方式: 1.简单的实现ListView顶部悬浮http://blog.youkuaiyun.com/ljfbest/article/details/387656412.Android 仿美团网,大众点评购买框悬浮效果,使用的ScrollView http://blog.youkuaiyun.com/xiaanming/article/details/1

猫的阁楼 7559

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android listview 顶部加载,几种实现ListView顶部悬浮效果

顶部悬浮,这个是老生常谈的控件,一搜索网上大篇幅的介绍,有几种实现方式:1.简单的实现ListView顶部悬浮http://blog.youkuaiyun.com/ljfbest/article/details/38765641java效果图: 这几种方式要实现的悬浮tab不都是透明的,而且是ListView或者ScrollView中一个单独的模块,好比是一个单独的header或item悬浮。若是要实现hea...

weixin_39894104的博客 421

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android 顶部悬停,动态顶部搜索框背景透明

概述: 在开发中遇到了一个要求实现一个界面中展示列表数据,实现一个listview顶部悬停效果。找了一些scrollview中嵌套listview的实现方式,但是后来感觉还是不如直接一个listview去实现,调试的时候没有那么头疼了。下面图展示的是下拉一段具体半透明,在顶部是全透明悬浮的那个图没截。。 下面白色的会有图,懒。没找大概思路:       就是在listview中添加头部和底部去实现...

wenyaguang的博客 3793

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

简单实现ListView顶部悬浮效果

版权声明:本文为博主原创文章,未经博主允许不得转载。 声明转载地址:http://blog.youkuaiyun.com/ljfbest/article/details/38765641 首先上效果图,实现如下效果: 起初在网上搜了下实现这样的效果,美团网,大众点评的“购买框”悬浮效果也是这样的,不过作者实现比较麻烦,自己想了想就根据ListVie

u014486555的博客 1590

浅谈百度外卖筛选悬浮框效果的实现

开始在项目中一直实现类似于百度外卖的上滑会使得筛选框的界面停留在顶部,下滑的时候就会随着ScrollView下滑动。这种效果也在网上百度了很多,但是会出现在滑动过快的时候出现抖动的效果,用户体验极差。后来在夏安明大神的博客上看到一个新的思路来实现这个效果,感觉这个方法实现的效果很流畅,并且个人觉得该方法很巧妙。夏安明大神开始也写过一篇android高仿美团网及大众点评悬浮框效果,第一篇看起来有点复

Mikyou的专栏 4108
上一篇: 透明状态栏设置
下一篇: HashMap循环遍历方式及其性能对比
下沉的代码
博客等级 码龄12年 2粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值