android 实现打开笔记,课内资源 - 基于Android Studio开发的笔记APP

1 程序的运行环境、安装步骤运行环境

JDK 1.8

compileSdkVersion 27

程序的组成部份

Xml布局文件

Java程序文件

ddfe4e33fded702a5c443978baa1a9d7.png

1e6e3543d4d31cb7ecf2eb9b612c35ce.png

安装步骤在一台华为手机上安装软件

下载apk,可以传到邮箱中然后下载,按照提示允许安装即可

2 程序开发平台开发环境:Android Studio 3.1.0

代码行数:1277

4b7921360a786732e622f0280723cf0e.png

3 程序功能说明

提醒用户给予权限

0cadd0ed60d2674358d075cca998877d.png

基本的保存、删除、重命名功能

还可以将笔记截为长图分享到朋友圈、好友、微博等;编辑框里面的文字内容更换了叹墨咏黑第三方字体库。

3f6d2fd25e20678d5a6b7d038070e906.png

支持图文混排功能,可以从图库选择,也可以拍照获取

亲切的笔记查询功能

4 程序算法说明及面向对象实现技术方案

33edb6fcda18d3fda47df17bc48afce6.png

本程序中定义了

NoteInfo类实现了Serializable接口(可以放进Bundle数据包):为笔记列了id、name、type、content、time成员

DBSchema类定义了数据库的基本名字、表名和各列的名

MyDBhelper类是继承了SQLiteOpenHelper的子类

DBdataSource类封装了各种对数据库的操作

DataAdapter类是继承了BaseAdapter的子类,利用了ViewHolder设计模式,性能更加提升

MyDate类可以获取时间,返回以下格式的时间返回以下格式的时间2018年1月22日 16:36:55

NoteWrapper类封装了编辑笔记时的所有操作:保存、重命名、删除、截长图和各种对Bitmap的操作(获取比例、优化图片质量等等)

SearchNoteAsyncTask类是继承了AsyncTask的子类,负责调用Myrepository类里面的getNoteInfo()方法获取笔记信息,并通过接口返回给数据适配器

StringFunction类封装了一些对字符串检错的方法

Myrepository类负责从数据库调取所有笔记的信息

MessageBox类封装了对话框负责和用户交互

UiHelper类封装了提示信息的方法

edit_activity类是编辑编辑的界面包括保存删除重命名分享的菜单栏、拍照按钮、图库按钮、EditText图文混排编辑框

MainActivity类是第一个展示给用户的界面,包括查询笔记的编辑框、ListView列表、添加笔记按钮和长按批量删除

5 技术亮点、关键点及其解决方案

5.1 本程序的亮点更换了字体叹墨咏黑

这个记事本程序支持图文混排

可以从相机、图库调取图片

可以将笔记分享为长图

长按ListView多选删除

必要的提醒:例如按两次退出程序

5.2 本程序的技术关键点采用了多线程技术以提升程序的性能:主要在MainActivity中的onResume()方法 中进行异步访问数据库来获取列表的信息,这里主要用了AsyncTask这个轻量级异步任务类

使用Sqlite来保存数据:表列项有时间(Text)、内容(Text)、类型(Text)、名字(Text)、ID号(Integer)。使用了SQLiteOpenHelper类

应用了MVC模式来设计整个程序的架构

使用了各种Bitmap类操作方法压缩、解析、优化、获取图片

ListView长按实现Actionbar多选删除

在编辑框贴上图片时将图片自动生成一个文件名存在/sdcard/myImage/文件夹

利用SpannableString、ImageSpan和editable三个类加上对光标的操作实现在EditText的插入图片

取EditText的内容时,图片会以路径的形式显示在String类型里,这时利用正则表达式从EditText中的内容解析出来图片路径,实现在正常的位置显示图片

程序中大量使用了回调:例如异步访问数据库后将数据返回给适配器、保存新的笔记后将一个新NoteInfo类返回给edit_activity的noteInfo字段等等例子

调用系统的相机、图库、获取用户权限和分享时启动相应的activity

程序中大量使用了File文件操作:在EidtText插入图片时、获取屏幕截图时都存储、获取了文件

在ListView的数据适配器中采用了ViewHolder设计模式

退出程序时需要两次按回退建才能退出;没保存笔记时会提醒是否返回上一个界面,这些都复写了onkey()方法

5.3 遇到的技术难点及对应的解决方案在EditText中插入图片时 由于有删除、新增时出现一下子两张的情况

解决:在插入图片时,由于是插入图片的路径然后再解析图片路径获取图片,所有我们再路径最前面和最后面添加一个光标的换行,然后设置光标在最后位置

之前从相机调取图片时速度很慢

解决:原来是多加了一些Bitmap的操作,进行了优化后速度很快

截长图时的背景问题,由于Canvas类是根据Bitmap绘制背景,可是一张空的Bitmap背景是黑色的,导致截图后背景位黑色

解决:在Canvas绘制背景前将Bitmap用Scrollview的背景(在drawable文件夹下的一张图片)填充,然后利用Bitmap的拉伸图片的方法将Bitmap根据Scrollview的实际高度拉伸,这样背景就有了

截图问题

解决:将EditView放在ScrollView里,对ScrollView截长图

解析EditText中的图片

解决:利用正则表达式解析内容中的图片路径,然后内容和路径填充一个SpannableString类的对象,将该对象返回给EditText

UI交互问题:例如弹出对话框要求用户保存、提醒用户未保存等等

解决:封装了一个单独的对话框类,利用实现接口来写不同的操作

防止解析图片时出现OOM

解决:取系统中图片是必压缩一下

6 简要开发过程查找资料确定要使用的算法与数据结构

完成大体系统UI设计

进行数据库功能开发

数据库功能开发完成,并进行测试

进行EditView的图片与文字混排功能开发

EditView的图片与文字混排功能开发,并进行测试

进行消息提示UI开发

消息提示UI开发完成,并进行测试

增加删除、重命名、保存、分享、批量删除的功能添加,并新增菜单栏

删除、重命名、保存、分享、批量删除的功能完成,并进行测试

对程序进行集成测试

程序开发工作完毕,编写及整理文档

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值