仿抖音“经验”频道项目简介
1. 简介
这是一个基于 Jetpack Compose + MVVM 实现的仿抖音“经验”频道 Android 客户端 Demo,用双列瀑布流提升攻略、种草、避雷等内容在移动端的信息密度和浏览效率。
2. 项目背景
该项目是参加字节客户端方向学习时完成的结营项目,代码现已归档。项目目标不是简单复刻短视频播放流,而是聚焦抖音“经验”频道中更偏主动浏览、主动筛选的内容消费场景:用户不再只被动刷单列推荐,而是能在同屏看到更多封面、标题和作者信息,快速判断哪些内容值得点开。
3. 核心功能及亮点
-
双列瀑布流信息流:使用 Compose 的
LazyVerticalStaggeredGrid实现双列卡片布局,同屏可展示更多内容,适合攻略、测评、种草类信息的快速扫描,提升用户的选择效率。 -
单列/双列动态切换:顶部工具栏支持在双列瀑布流和单列大图流之间切换,让用户既可以快速浏览大量内容,也可以切到更沉浸的内容查看模式。
-
下拉刷新与上拉预加载:通过
PullToRefreshBox、滚动状态监听和分页 Mock 数据实现刷新与无限加载;列表滚动到倒数第 4 个卡片时提前加载下一页,减少用户看到空白或等待圈的概率。 -
点赞状态即时反馈:卡片支持点赞/取消点赞,
ViewModel使用StateFlow更新单个内容项的isLiked和likeCount,让交互反馈和数据状态保持一致。 -
图片预占位与缓存友好体验:数据模型中保留
aspectRatio,卡片渲染时用Modifier.aspectRatio()提前确定图片高度,减少异步图片加载导致的瀑布流跳动;图片加载基于 Coil,可利用其内置缓存改善重复浏览体验。
4. 技术栈
-
Kotlin:作为主要开发语言,用于编写 Android 客户端业务逻辑、数据模型和 UI 状态管理代码。
-
Jetpack Compose:负责声明式 UI 构建,包括主屏幕、顶部搜索/工具栏、瀑布流列表和内容卡片;核心瀑布流由
LazyVerticalStaggeredGrid实现。 -
Material 3:提供
Scaffold、Card、IconButton、PullToRefreshBox等基础组件,支撑暗色风格界面、卡片布局和下拉刷新交互。 -
MVVM 架构:
ExperienceScreen负责界面渲染,ExperienceViewModel负责状态与业务逻辑,VideoRepository负责数据提供,降低 UI 与数据逻辑之间的耦合。 -
StateFlow + Coroutines:
StateFlow用于向 Compose 暴露视频列表、刷新状态、加载状态和布局模式;协程用于模拟网络延迟、刷新和分页加载等异步流程。 -
Coil:负责封面图和头像的异步加载,并利用图片缓存能力优化重复浏览体验。
-
Gradle Kotlin DSL / Android Gradle Plugin:负责 Android 应用构建、依赖管理和 Compose 编译配置。
5. 项目成果
-
完成了一个可运行的 Android 客户端 Demo,具备仿抖音“经验”频道的双列瀑布流浏览体验。
-
实现了内容卡片、头像、标题、点赞数、点赞状态、刷新、分页加载、布局切换和图片源切换等完整交互闭环。
-
通过 MVVM + StateFlow 组织 UI 状态,使点赞、刷新、加载更多和布局切换都能由数据驱动界面更新,代码结构清晰,便于继续扩展真实接口或详情页。
-
项目包含双列模式、单列模式、下拉刷新/加载等演示截图和录屏素材,可用于个人主页、作品集或面试展示。
-
开发过程中重点解决了瀑布流图片高度跳动、列表预加载时机和局部状态更新等体验问题,对现代 Android 声明式 UI 与信息流场景有了完整实践。
6.图片展示


