适合初学者入门的项目,通过对 Kotlin 的系统运用,实现的一个功能完备符合主流市场标准 App。包含知识点(MVVM 开发架构单 Activity 多 Fragment 项目设计暗夜模式屏幕

Posted Wei_Leng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了适合初学者入门的项目,通过对 Kotlin 的系统运用,实现的一个功能完备符合主流市场标准 App。包含知识点(MVVM 开发架构单 Activity 多 Fragment 项目设计暗夜模式屏幕相关的知识,希望对你有一定的参考价值。

fragmject

项目地址:miaowmiaow/fragmject 

简介: 适合初学者入门的项目,通过对 Kotlin 的系统运用,实现的一个功能完备符合主流市场标准 App。包含知识点(MVVM 开发架构、单 Activity 多 Fragment 项目设计、暗夜模式、屏幕录制、图片编辑、字节码插桩)。项目结构清晰,代码简洁优雅。

更多:作者   提 Bug   

标签:

刚开始学习 Kotlin 其实挺痛苦的,相关的书籍或视频偏向于知识点的讲解看完好像还是不会做项目,开源的项目内容太多用来上手实在不合适。
多希望有个代码简单,内容全面,知识详细,快速上手的项目,于是便有了 fragmject 项目。
在此感谢 玩 Android 提供的 开放 API 。

简介

一个入门级的项目,通过对 Kotlin 和 Jetpack 全家桶的系统运用,实现的一个功能完备符合主流市场标准 App。 代码简单,内容全面,知识详细,快速上手,对理解其他项目设计思想和封装技巧也很有帮助。
学习本项目你将有如下收获:

  • Kotlin(函数进阶,泛型,反射,协程...)
  • MVVM(ViewModel,LiveData...)
  • 单 Activity 应用架构(Navigation...)
  • 常用封装(图片选择器、图片编辑器、日期控件、全面屏沉浸、屏幕录制、字节码插桩...)

开发环境

为了您能正常运行本项目,请使用 android Studio Bumblebee (2021.1.1) 🐝 和 Android Gradle 7.1.2 或者以上版本

Download Android Studio

如果您不方便升级开发工具,请切换至 tag v1.2.6.1

截图展示

项目目录结构

├── app                                  app
|   └── src 
|       └── main 
|       |   └── java                     源码目录
|       |   |   ├── activity             Activity 目录
|       |   |   |   └── MainActivity     项目唯一 Activity
|       |   |   ├── adapter              Adapter 目录
|       |   |   ├── fragment             Fragment 目录
|       |   |   ├── model                ViewModel 目录
|       |   |   └── App                  Application
|       |   |
|       |   └── res                      资源目录
|       |   |   └── navigation           导航图目录
|       |   |
|       |   └── AndroidManifest.xml      配置文件
|       |
|       └── build.gradle                 模块构建配置
|       └── channel                      渠道配置文件
|       └── dictionary                   自定义混淆字典
|       └── proguard-rules.pro           代码混淆配置文件
| 
├── library-base                         基础 library(存放通用封装源码)
|   └── src 
|       └── main 
|       |   ├── assets                   原生文件目录
|       |   └── java                     源码目录
|       |       ├── bus                  消息总线目录
|       |       ├── db                   Database 目录
|       |       ├── dialog               Dialog 目录
|       |       ├── http                 网络请求目录
|       |       ├── provider             ContentProvider 目录
|       |       ├── utils                工具类目录
|       |       └── view                 自定义 view 目录
|       | 
|       └── build.gradle                 模块构建配置
| 
├── library-common                       公共 library(存放各个 module 公用源码及资源)
|   └── src 
|       └── main 
|       |   └── java                     源码目录
|       |       ├── bean                 实体类目录
|       |       └── constant             常量配置目录
|       | 
|       └── build.gradle                 模块构建配置
| 
├── miaow-picture                        图片编辑器模块(目录同 app,不再展开)
├── miaow-plugin                         插件模块
|   └── src 
|       └── main 
|           └── groovy                   源码目录
|           | 
|           └── resources                配置目录
|               └── statistic.properties 插件配置
├── module-user                          用户模块(目录同 app,不再展开)
├── module-wan                           玩 Android 功能模块(目录同 app,不再展开)
| 
├── repos                                插件生成目录
|
├── build.gradle                         项目构建配置
├── config.gradle                        gradle 编译文件 gradle 依赖配置
├── config.properties                    项目配置
├── gradle.properties                    gradle 配置
└── settings.gradle                      项目依赖配置

Kotlin

Kotlin 是一种富有表现力且简洁的编程语言,不仅可以减少常见代码错误,还可以轻松集成到现有应用中。

学习 Kotlin 编程语言

Kotlin 代码示例

ViewBinding

通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。与使用 findViewById 相比,视图绑定具有一些很显著的优点:

  • Null 安全
  • 类型安全

轻松使用 ViewBinding

LiveData

LiveData 是一种可观察的数据存储器类,它具有生命周期感知能力,这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。
并且使用 LiveData 具有以下优势:

  • 确保界面符合数据状态
  • 不会发生内存泄漏
  • 不会因 Activity 停止而导致崩溃
  • 不再需要手动处理生命周期
  • 数据始终保持最新状态
  • 适当的配置更改
  • 共享资源

轻松使用 LiveData

ViewModel

ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。 ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。

轻松使用 ViewModel

协程

协程是我们在 Android 上进行异步编程的推荐解决方案。值得关注的特点包括:

  • 轻量
  • 内存泄漏更少
  • 内置取消支持
  • Jetpack 集成

轻松使用协程

MVVM

MVVM(Model-View-ViewModel) 最早由微软提出。ViewModel 指 "Model of View"——视图的模型。

一文看懂 MVVM

Navigation 是 Android Jetpack 组件之一,主要是用于 Fragment 路由导航的框架,通过 Navigation 我们可以设计出单 Activity 应用架构。

一文看懂 Navigation

WebView 优化及 H5 秒开实践

满满的 WebView 优化干货,让你的 H5 实现秒开体验

KVDatabase

基于 RoomDatabase 封装,通过键值对的方式来存储数据,不用再去关心 RoomDatabase 的复杂操作。

快速使用

// 存储数据
KVDatabase.set(key: String, value: String)

// 获取数据
KVDatabase.get(key: String)

SharedFlowBus

基于 SharedFlow 封装的消息总线

SharedFlowBus:30 行代码实现消息总线你确定不看吗

快速使用

// 发送消息
SharedFlowBus.with(objectKey: Class<T>).tryEmit(value: T)

// 发送粘性消息
SharedFlowBus.withSticky(objectKey: Class<T>).tryEmit(value: T)

// 订阅消息
SharedFlowBus.on(objectKey: Class<T>).observe(owner) it ->
    println(it)


// 订阅粘性消息
SharedFlowBus.onSticky(objectKey: Class<T>).observe(owner) it ->
    println(it)

字节码插桩

最通俗易懂的字节码插桩实战 —— 优雅的打印方法执行时间

最通俗易懂的字节码插桩实战 —— 自动埋点

动态权限申请

自己动手撸一个动态权限申请库

图片编辑器

自己动手撸一个图片编辑器(支持长图)

截图展示

接入

第 1 步:在工程的 build.gradle 中添加:

allprojects 
    repositories 
        ...
        mavenCentral()
    

第 2 步:在应用的 build.gradle 中添加:

dependencies 
    implementation 'com.github.miaowmiaow.fragmject:miaow-picture:1.2.6'

快速使用

PictureEditorDialog.newInstance()
    .setBitmapPath(path)
    .setEditorFinishCallback(object : EditorFinishCallback 
        override fun onFinish(path: String) 
            val bitmap = BitmapFactory.decodeFile(path, BitmapFactory.Options())
        
    )
    .show(childFragmentManager)

如上所示:

  1. 通过 PictureEditorDialog 调用图片编辑器
  2. 通过 setBitmapPath(path) 传入图片路径
  3. 通过 setEditorFinishCallback(callback) 获取编辑后的图片地址

如果觉得 PictureEditorDialog 不能满足需求,还可以通过 PictureEditorView 来自定义样式

自定义使用

<com.example.miaow.picture.editor.PictureEditorView
    android:id="@+id/pic_editor"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
picEditor.setBitmapPath(path)
picEditor.setMode(PictureEditorView.Mode.STICKER)
picEditor.setGraffitiColor(Color.parseColor("#ffffff"))
picEditor.setSticker(StickerAttrs(bitmap))
picEditor.graffitiUndo()
picEditor.mosaicUndo()
picEditor.saveBitmap()

如上所示:

  1. 通过 setBitmapPath(path) 传入图片路径
  2. 通过 setMode(mode) 设置编辑模式,分别有:涂鸦,橡皮擦,马赛克,贴纸
  3. 通过 setGraffitiColor(color) 设置涂鸦画笔颜色
  4. 通过 setSticker(StickerAttrs(bitmap)) 设置贴纸
  5. 通过 graffitiUndo() 涂鸦撤销
  6. 通过 mosaicUndo() 马赛克撤销
  7. 通过 saveBitmap() 保存编辑图片

PictureEditorView 就介绍到这里,具体使用请查看 PictureEditorDialog

图片裁剪

<com.example.miaow.picture.editor.PictureClipView
    android:id="@+id/clip"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
clip.setBitmapResource(bitmap)
clip.rotate()
clip.reset()
clip.saveBitmap()

如上所示:

  1. 通过 setBitmapResource(bitmap) 传入裁剪图片
  2. 通过 clip.rotate() 图片旋转
  3. 通过 clip.reset() 图片重置
  4. 通过 clip.saveBitmap() 保存裁剪框内图片

PictureClipView 就介绍到这里,具体使用请查看 PictureClipDialog

主要开源框架

Gitee 镜像

About me

Thanks

感谢所有优秀的开源项目 ^^
如果喜欢的话希望给个 Star 或 Fork ^
^
谢谢~~

以上是关于适合初学者入门的项目,通过对 Kotlin 的系统运用,实现的一个功能完备符合主流市场标准 App。包含知识点(MVVM 开发架构单 Activity 多 Fragment 项目设计暗夜模式屏幕的主要内容,如果未能解决你的问题,请参考以下文章

适合初学者入门的项目,通过对 Kotlin 的系统运用,实现的一个功能完备符合主流市场标准 App。包含知识点(MVVM 开发架构单 Activity 多 Fragment 项目设计暗夜模式屏幕

适合初学者入门的项目,通过对 Kotlin 的系统运用,实现的一个功能完备符合主流市场标准 App。包含知识点(MVVM 开发架构单 Activity 多 Fragment 项目设计暗夜模式屏幕

周三福利 | Kotlin程序开发入门精要

最适合Java初学者的练手项目!图书管理系统(资料源码分享!)

TypeScript入门版~适合初学者快速学习。

TypeScript入门版~适合初学者快速学习。