尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AnimatedExpandableListView 完全入门:30秒为Android应用加上丝滑展开折叠动画

AnimatedExpandableListView 完全入门:30秒为Android应用加上丝滑展开折叠动画 AnimatedExpandableListView 完全入门30秒为Android应用加上丝滑展开折叠动画【免费下载链接】AnimatedExpandableListViewAn extendable, flexible ExpandableListView widget that supports animations.项目地址: https://gitcode.com/gh_mirrors/an/AnimatedExpandableListViewAnimatedExpandableListView是一个专为 Android 打造的可展开折叠列表动画控件它是原生ExpandableListView的增强版点击分组即可播放丝滑的展开/折叠过渡动画。如果你受够了系统默认瞬间弹出的突兀效果这个开源控件只需 3 步接入就能让你的应用拥有 App Store 级交互体验。为什么需要这个展开折叠动画控件Android 原生的ExpandableListView功能强大但有个明显的短板展开和折叠没有任何过渡动画——子项要么瞬间出现要么瞬间消失观感非常生硬。AnimatedExpandableListView 正是为解决这个问题而生。它在完全保留原生ExpandableListView用法的基础上额外提供了两个带动画的方法让列表的展开折叠动画变得平滑自然整个过程仅需约 300 毫秒。30秒上手3步接入步骤第1步获取项目源码在终端中执行以下命令克隆仓库git clone https://gitcode.com/gh_mirrors/an/AnimatedExpandableListView将核心控件源码复制到你的项目中核心文件只有一个控件源码src/com/idunnololz/widgets/AnimatedExpandableListView.java第2步在布局文件中替换控件打开布局 XML把原来的ExpandableListView直接换成带包名的自定义控件即可属性写法完全不变。可以参考示例布局res/layout/activity_main.xml核心就是一行标签com.idunnololz.widgets.AnimatedExpandableListView android:idid/listView android:layout_widthmatch_parent android:layout_heightmatch_parent /分组行和子项行的样式分别由res/layout/group_item.xml与res/layout/list_item.xml定义你可以随意改成自己的 UI。第3步让 Adapter 继承专用基类这一步是关键你的列表适配器必须继承AnimatedExpandableListAdapter它是AnimatedExpandableListView内部定义的静态抽象类位于 src/com/idunnololz/widgets/AnimatedExpandableListView.java 中。与普通 Adapter 相比只需把两个方法改个名原 Adapter 方法改名为getChildView(...)getRealChildView(...)getChildrenCount(...)getRealChildrenCount(...)完整写法可直接参考示例代码src/com/example/animatedexpandablelistview/MainActivity.javaExampleAdapter类。两个核心方法展开与折叠动画给列表绑定了 Adapter 后只需注册一个分组点击监听根据当前状态调用对应方法即可——这就是 30 秒内完成全部接入的原因方法作用源码位置expandGroupWithAnimation(int)播放展开动画AnimatedExpandableListView.javacollapseGroupWithAnimation(int)播放折叠动画AnimatedExpandableListView.javalistView.setOnGroupClickListener(new OnGroupClickListener() { Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { if (listView.isGroupExpanded(groupPosition)) { listView.collapseGroupWithAnimation(groupPosition); // 折叠动画 } else { listView.expandGroupWithAnimation(groupPosition); // 展开动画 } return true; } }); 示例中用 100 个分组、每组最多 100 个子项做了压力测试可见动画在长列表下依然流畅稳定。原理速览300ms 动画是怎么实现的 这个控件的巧妙之处在于借位调用展开方法后控件通知 Adapter 进入动画模式并真正执行expandGroup刷新列表此时 Adapter 不返回真实的子项视图而是返回一个占位视图DummyView由它负责绘制出所有子项的画面对这个占位视图做高度从 0 到目标高度的插值动画时长由ANIMATION_DURATION 300毫秒控制见 AnimatedExpandableListView.java动画结束后退出动画模式列表刷新为真实视图——用户看到的就是一次完整的展开折叠动画。折叠动画则是先播放高度归零的过程结束后再真正调用collapseGroup。控件还做了大量边界处理分组在屏幕外时自动跳过动画、动画中途反向切换会从中断高度继续、长列表会估算高度避免卡顿。项目文件结构一览️ 整个项目非常轻量核心文件一览src/com/idunnololz/widgets/AnimatedExpandableListView.java—— 控件 Adapter 基类 动画实现全部核心逻辑src/com/example/animatedexpandablelistview/MainActivity.java—— 完整使用示例res/layout/activity_main.xml—— 布局接入示例res/layout/group_item.xml/res/layout/list_item.xml—— 分组行与子项行样式res/values/、res/values-sw600dp/、res/values-sw720dp-land/—— 多屏幕适配资源AndroidManifest.xml—— 应用配置常见问题 FAQQ可以用普通的 BaseExpandableListAdapter 吗A不行。setAdapter时会强制检查类型必须继承AnimatedExpandableListAdapter否则抛出ClassCastException。Q动画时长能调整吗A可以。时长由源码中的ANIMATION_DURATION常量默认 300ms控制复制源码后自行修改即可。Q点击分组没有任何反应A确认两点——① Adapter 已继承AnimatedExpandableListAdapter② 使用了expandGroupWithAnimation/collapseGroupWithAnimation而不是原生的expandGroup/collapseGroup。Q适合什么场景A设置页、FAQ 帮助、商品分类、目录导航等一切分组 子项结构的界面都是 Android 展开折叠动画的理想用武之地。 总结AnimatedExpandableListView 用单个 Java 文件就补齐了原生列表控件最缺的一块——展开折叠动画。三步接入、方法改名、监听点击30 秒让你的 App 交互体验立刻上一个台阶。【免费下载链接】AnimatedExpandableListViewAn extendable, flexible ExpandableListView widget that supports animations.项目地址: https://gitcode.com/gh_mirrors/an/AnimatedExpandableListView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表