该APP着重注意了UI风格和交互效果,对于UI界面,在字体、颜色等方面进行了精心的选取,尤其是颜色多在中国传统色和莫兰迪经典色中选取,使得整个页面协调美观。
对于用户交互的动画效果,APP在很多地方进行了精心设计。点击界面下方的导航栏时,会自动由亮色切换成暗色;在小组事项的成员展示中、APP使用了带箭头转动效果的下拉列表展示成员信息;在作业列表的更新中,我们也使用了下拉更新的动态效果,同时实现了直接点击进行刷新的功能;在待办事项长按删除时,我们使底部导航栏自动隐藏等等。
APP使用了PopupWindow
、Handler
、Fragment
、Service
、 BroadcastReceiver
、Thread
、AlertDialog
、FileProvider
、WindowManager
、Menu
、Notification
、AlarmManager
等多个基本组件。
在内容存储方面,APP使用了SharedPreferences
、SQLite
、内部存储、外部存储、远程Mysql
存储等多种存储方式。
在UI显示方面,APP使用了RecyclerView
、CardView
、GridView
、AbsListView
、AnimatedExpandableListView
、FrameLayout
、RoundedImageView
、BubbleChart
、ExpandableLayout
、RadioGroup
、LineChart
、SpinKitView
、SrollView
、ProgressBar
、TabLayout
、ViewPager2
,同时,我们自主实现了RippleView
组件。
在动画设计方面,APP实现了引入、退出、旋转、抖动等多种动画形式。
在显示效果方面,APP对轮廓效果、阴影效果、点击效果等多个方面进行了单独的实现,具体实现了52个xml
文件用于显示效果。
由于对网页的爬取对很慢,因此我们的很多努力都用在了降低Elearning
操作时延上面。
在对Elearning
功能进行实现的过程中,我们发现如果每次操作都执行重新登录操作,则注定会减慢界面的加载速度,降低用户的使用体验,因此,我们实现了Cookie
的持久化,将首次登录后的Cookie
通过SharedPreferences
进行保存,降低了加载时间。
对于登录后课程、文件、作业信息的直接获取同样较为缓慢,因此我们选择将一些不会变动的信息优先存储在本地,打开时从本地读取。同时运行一个Service
,在后台对数据进行重新获取与更新。对于一些挤占网络带宽的加载,我们决定将APP决定权交给用户。通过在作业界面设置header
来显示上次更新时间,使用户下拉或者点击更新进行重新加载。
为了能够简洁、完整地向用户展示作业信息,我们实现了三级列表的技术,对每一级列表,我们都确保了其具有被点击的功能和展开效果,虽然原理上并不难,但是实现上较为复杂,耗费了我们大量的时间。
我们借助了mikephil
插件,实现了使用折线图对代码数据的统计可视化,该折线图可进行滑动查看。同时,我们使用Hash表将横坐标显示为日期,同时实现了不同折线的不同阴影效果。我们在该视图下添加了RecyclerView
组件,在点击图表的同时进行响应,显示相应日期内的待办事项。
对于小组数据的同步,我们选择在远程终端中使用SpringBoot
运行后端,实现小组间数据的同步。
对于不同Fragment
之间的数据同步,例如在Elearning
页面我们选择使用三个Fragment
进行展示,但是这三个Fragment
中有些数据例如课程信息是共享的,为了实现三个Fragment
数据一次获取,我们大量使用了BroadcastReceiver
来进行Fragment
或者Activity
之间的数据通信。
对于使用okhttp
的数据获取或者对本地文件的获取,由于新版Android
不允许该操作在主线程中使用,因此我们为这些操作创建了子线程,并大量使用Handler
和Message
组件实现主从线程间的数据通信。
我们没有做到真正意义上的程序保活,但是我们通过使用前台进程,确保了用户不主动杀死APP的情况下,所有待办事项会在截止时间的前30分钟进行事项提醒。具体执行方法是从所有待办中获取最早需要提醒的时间,然后使用AlarmManager
设置具体的提醒时间,再使用BroadcastReceiver
进行接收,这一方法经测试无法在程序被杀死后重新唤醒程序。
主界面主要借助RecyclerView
实现列表的展示,同时我们使用clock
组件在左上角展示了当前时间。每个列表项实现了点击和长按两种操作,点击进入事项详情,长按进行多选删除。如果点击右上角的加号,则进入添加事项界面。点击另一个按钮,进入数据可视化界面。
在个人待办方面,这款APP实现了基本的增删改查功能。在待办内容上,APP实现了时间的滑动列表选取功能;同时,APP设置了四个事项重要等级,每个等级对应了不同的颜色,选取相应的颜色会直接映射到标题上。删除操作采用长按多项选择的方法。
我们通过使用前台进程,较大限度地保证APP不被杀死。在这个基础上,我们规定截止日期之前30分钟进行事项提醒。
在该基础之上,APP实现了对待办数据的可视化统计。统计采用图标的形式进行展示,纵坐标对应到具体某天,其中当天显示为“今天”。图中显示四条折线,反映出每个重要等级的事项数量及其变化趋势。点击某一天的对应区域,会显示当天存在的具体待办事项,可通过点击此事项进行查看和编辑。
我们通过与远端的服务器连接,实现小组合作的待办形式。该情况需要先通过第四级页面进行注册后登录使用。若未登录则提示登录。
该主界面主要包括了小组名称、组员信息以及具体事项。
其中组员信息采用下拉列表的形式实现,右上角箭头具有旋转动画效果。在具体事项方面,显示效果与个人事项相同。小组切换通过点击右上角按钮弹出选择框后进行操作。
APP实现了对elearning
文件及作业信息的获取,该页面采用TabLayout
和ViewPaper
组件实现页面的滑动切换。该部分主要包括课程、作业和文件三块内容。
考虑额elarning账号的安全性,我们选择对其账号进行本地存储,点击右上角头像,会弹出子工具栏,其支持重新登录、退出登录及切换头像的功能。
在课程层面,我们使用GridView
对课程所有课程进行展示。点击进入课程后可查看该课程所有文件信息,包括文本文件及目录文件。通过点击具体文件,可对其进行下载,下载过程中会展示下载进度。APP对常用的文件后缀进行了图标映射,确保了文件类型清晰可见。
作业部分实现了三级列表,第一级展示课程,第二级展示该课程下的作业项,第三级展示该作业的部分信息,在第三集列表中点击“查看详情”按钮,可以直接进入到作业详情信息。该信息中包含附带文件以及提交文件,点击文件可以进行下载。同时,该页面还可以展示作业给分情况以及评论。
另外一个比较主要的功能是实现了手动的刷新,点击最近更新时间或者下拉列表会进行文件信息的重新获取。
该部分主要存储并展示下载后的文件,长按文件项会弹出菜单栏,可执行删除、多选、转发、移动、重命名等功能。同时,我们内置了多个插件,支持对pdf、markdown等多种格式文件的直接查看,对于不具备APP内部查看的文件类型,使用FileProvider
选择其他APP进行打开。
对于个人信息页面的设计比较简单,主要包括一些功能设置和软件更新,其中部分功能尚未实现。
若用户未登录,则显示登录页面。登录后会获取远程用户信息、小组信息、待办信息等。
该APP实现了待办列表的创建、到期提醒、小组远程共享以及数据的可视化。同时还实现了Elearning课程的文件、作业信息的查看与获取,以及相应的文件管理技术。在这一过程中,APP使用了很多的技术。同时,该APP注重UI的展示与设计,包含了8个静态动画设计以及多个动态设计,使用了共8中字体进行展示,使用了50多个文件对展示的边框、阴影、点击效果等进行设计。Elearning
功能虽然采用了爬虫技术,但是使用多种方法降低了程序的操作时延,保证了程序的流畅性。
在设计该APP的过程中,我对很多技术进行了研究,其中最耗时的就是保活技术,但是最终没有完美实现。虽然本学期有三分之一的时间都用到了该APP的代码上,但是仍有很多功能没有实现,比如个人待办和小组待办之间的相互转换、待办的富文本编辑、小组成员之间的聊天室等等。由于时间的原因,这些功能只能在课程结束后继续将其补齐,将这款APP真正做好。