Skip to content

levy-tech-spark/ComposeCraft

Repository files navigation

ComposeCraft

用 Jetpack Compose 写的笔记+画板应用,顺便练手多模块架构。

效果预览

主页 画板

为啥写这个

主要是想试试 Compose 的 Canvas API 能不能做点有意思的东西,然后发现还挺好玩的,就顺手加了个笔记功能。

项目用了 MVI 架构,不是为了炫技,是真的觉得状态管理这么搞比较清晰。

技术选型

主要的

  • Kotlin 1.9.22
  • Jetpack Compose (Material 3)
  • Room 数据库
  • Hilt 做依赖注入
  • Coroutines + Flow

架构

多模块分了几层:

  • core/ 放通用的东西(主题、工具类、数据库)
  • feature/ 每个功能一个模块
  • app/ 主模块负责把它们串起来

每个 feature 都是 MVI 模式,State/Intent/Effect 这套。

功能

笔记

就是普通的笔记 app 该有的:列表、编辑、删除,都存在本地。

画板

可以随便画,支持:

  • 8 种颜色
  • 笔刷粗细调节
  • 清空重画

实现上用的 Compose 的 Canvas + 手势识别,性能还行。

项目结构

ComposeCraft/
├── app/
│   ├── di/                    # Hilt 模块
│   ├── navigation/            # 导航配置
│   └── ui/                    # 主页
├── core/
│   ├── design-system/         # 主题和自定义组件
│   ├── common/                # MVI 基类、扩展函数
│   └── database/              # Room 数据库
└── feature/
    ├── editor/                # 笔记
    └── canvas/                # 画板

运行

git clone xxx
cd ComposeCraft
./gradlew assembleDebug

或者直接用 Android Studio 打开,Run 就行。

需要:

  • Android Studio Hedgehog 以上
  • JDK 17
  • API 26+ 的设备/模拟器

一些说明

MVI 为啥这么写

参考了 Google 的 Now in Android 项目,但做了些简化。每个 feature 的结构:

  • Contract.kt 定义 State/Intent/Effect
  • ViewModel.kt 处理业务逻辑
  • Screen.kt UI 层

关于多模块

其实对这种小项目来说有点过度设计了,但就是想试试多模块编译的速度优势。实际用下来,改个 feature 模块确实比整个项目重新编译快不少。

Canvas 的坑

最开始用 detectTapGestures 发现画不出连续的线,后来换成 detectDragGestures 才搞定。还有就是 Path 对象要注意复用问题,不然会有奇怪的 bug。

后续计划

有时间的话可能会加:

  • Markdown 支持
  • 导出图片
  • 云同步(可能用 Firebase)
  • 暗色主题

不过也可能咕咕咕...

License

MIT,随便用。


有问题欢迎提 issue,PR 也欢迎。

About

随手写的一个 Android 小画板。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages