Logo
VisionFlow

VisionFlow

学习项目

基于 Jetpack Compose + MVVM 实现的仿抖音“经验”频道 Android 客户端 Demo

Jetpack ComposeAndroid客户端KotlinCoil

仿抖音“经验”频道项目简介

1. 简介

这是一个基于 Jetpack Compose + MVVM 实现的仿抖音“经验”频道 Android 客户端 Demo,用双列瀑布流提升攻略、种草、避雷等内容在移动端的信息密度和浏览效率。

2. 项目背景

该项目是参加字节客户端方向学习时完成的结营项目,代码现已归档。项目目标不是简单复刻短视频播放流,而是聚焦抖音“经验”频道中更偏主动浏览、主动筛选的内容消费场景:用户不再只被动刷单列推荐,而是能在同屏看到更多封面、标题和作者信息,快速判断哪些内容值得点开。

3. 核心功能及亮点

  • 双列瀑布流信息流:使用 Compose 的 LazyVerticalStaggeredGrid 实现双列卡片布局,同屏可展示更多内容,适合攻略、测评、种草类信息的快速扫描,提升用户的选择效率。

  • 单列/双列动态切换:顶部工具栏支持在双列瀑布流和单列大图流之间切换,让用户既可以快速浏览大量内容,也可以切到更沉浸的内容查看模式。

  • 下拉刷新与上拉预加载:通过 PullToRefreshBox、滚动状态监听和分页 Mock 数据实现刷新与无限加载;列表滚动到倒数第 4 个卡片时提前加载下一页,减少用户看到空白或等待圈的概率。

  • 点赞状态即时反馈:卡片支持点赞/取消点赞,ViewModel 使用 StateFlow 更新单个内容项的 isLikedlikeCount,让交互反馈和数据状态保持一致。

  • 图片预占位与缓存友好体验:数据模型中保留 aspectRatio,卡片渲染时用 Modifier.aspectRatio() 提前确定图片高度,减少异步图片加载导致的瀑布流跳动;图片加载基于 Coil,可利用其内置缓存改善重复浏览体验。

4. 技术栈

  • Kotlin:作为主要开发语言,用于编写 Android 客户端业务逻辑、数据模型和 UI 状态管理代码。

  • Jetpack Compose:负责声明式 UI 构建,包括主屏幕、顶部搜索/工具栏、瀑布流列表和内容卡片;核心瀑布流由 LazyVerticalStaggeredGrid 实现。

  • Material 3:提供 ScaffoldCardIconButtonPullToRefreshBox 等基础组件,支撑暗色风格界面、卡片布局和下拉刷新交互。

  • MVVM 架构ExperienceScreen 负责界面渲染,ExperienceViewModel 负责状态与业务逻辑,VideoRepository 负责数据提供,降低 UI 与数据逻辑之间的耦合。

  • StateFlow + CoroutinesStateFlow 用于向 Compose 暴露视频列表、刷新状态、加载状态和布局模式;协程用于模拟网络延迟、刷新和分页加载等异步流程。

  • Coil:负责封面图和头像的异步加载,并利用图片缓存能力优化重复浏览体验。

  • Gradle Kotlin DSL / Android Gradle Plugin:负责 Android 应用构建、依赖管理和 Compose 编译配置。

5. 项目成果

  • 完成了一个可运行的 Android 客户端 Demo,具备仿抖音“经验”频道的双列瀑布流浏览体验。

  • 实现了内容卡片、头像、标题、点赞数、点赞状态、刷新、分页加载、布局切换和图片源切换等完整交互闭环。

  • 通过 MVVM + StateFlow 组织 UI 状态,使点赞、刷新、加载更多和布局切换都能由数据驱动界面更新,代码结构清晰,便于继续扩展真实接口或详情页。

  • 项目包含双列模式、单列模式、下拉刷新/加载等演示截图和录屏素材,可用于个人主页、作品集或面试展示。

  • 开发过程中重点解决了瀑布流图片高度跳动、列表预加载时机和局部状态更新等体验问题,对现代 Android 声明式 UI 与信息流场景有了完整实践。

6.图片展示

image1

image1

image1