Giter Site home page Giter Site logo

charlesshao / fragmject Goto Github PK

View Code? Open in Web Editor NEW

This project forked from miaowmiaow/fragmject

0.0 0.0 0.0 8.81 MB

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

License: Apache License 2.0

Kotlin 85.73% Java 5.95% JavaScript 1.94% HTML 0.98% CSS 0.01% Groovy 5.39%

fragmject's Introduction

前言

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

简介

一个入门级的项目,通过对 KotlinJetpack 全家桶的系统运用,实现的一个功能完备符合主流市场标准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

截图展示

1.jpg 2.jpg 3.jpg

项目目录结构

├── 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

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)
}

字节码插桩

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

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

动态权限申请

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

图片编辑器

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

截图展示

5.gif 6.gif 7.gif

接入

第 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 ^
^
谢谢~~

fragmject's People

Contributors

miaowmiaow avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.