之前介绍过自己大学时期做过的一些项目,里面有一个基于Android平台的项目叫PlanBetter,项目的详细介绍请参见,里面附有本项目的一些截图。如果您对本项目的设计实现感兴趣,欢迎您继续看下去!
这个项目是一年前做的,时间隔得比较久,而且之前也没做过什么总结,所以对于项目的具体设计实现可能记得不是很清楚,但是我会尝试着将它完整地呈现给大家。
这个项目的核心功能是计划这一块,通过三个连续的视图将昨天任务完成情况、今天任务完成情况以及未来任务提醒表现出来。用户可以通过滑动屏幕在这三个连续的视图之间进行切换,透过事先的规划作为一种提醒和指引,督促用户在规定的时间内把事情做好。可以给大家简单看一下计划这一块的截图:
均为昨天视图,左图为没有活动的显示效果,右图为有活动的显示效果
均为今天视图,左图为没有活动的显示效果,右图为有活动的显示效果
上图为未来视图,这里只截了有活动的效果图
截图演示到此为止。由于这里是设计篇,所以我着重介绍这里的设计思路。
对于一个活动,比较重要的三点就是时间、地点和活动内容。当然地点可以不用确定,有的时候只用了解时间和活动内容即可。
关于昨天
对于昨天,我们往往关心的是昨天都做了哪些事情,有哪些事情没有完成,哪些事情是比较重要的。当然你可以看完之后将其删除,保护您的隐私。
所以你们看到的昨天视图,即是将这些信息提供给用户。之前的设计图是在纸上画的,就不提供给大家了。画图说明如下图所示:
昨天视图的布局代码如下所示,其中yesterday_task_layout.xml为整个布局的文件,yesterday_task_item.xml为单个活动的布局,因为活动列表是用ListView来实现的。
1 26 10 3012 2317 21 22 29
1 29 10 11 13 41 4215 3022 25 2928 32 4038 39 44 5146 49 50
关于今天
今天对比昨天而言,需求又不一样。随着新的空白的一天的开始,你可以随时添加当天需要完成的任务,除了活动内容和时间地点以外,你还可以指定活动周期(即该活动持续多少天)、活动优先级(即活动重要性)以及是否设置活动提醒(即闹钟提醒)。如果当天存在活动未完成,且设置了活动提醒,状态栏会显示一个小闹钟的图标,可以参见上面今天视图右边那张图片。
同样,活动的完成情况可以根据颜色的明暗来区分,颜色为暗色的表示活动已完成。用户可以通过单击某个活动来修改活动的是否完成情况,也可以长按该活动来对它进行进一步的操作,包括“编辑活动”、“删除活动”和“推迟活动”。
今天视图的布局代码如下所示,同样活动列表也是用ListView来实现。
1 26 10 3712 3017 21 24 28 2936
1 26 7 8 10 43 4413 3018 22 2926 28 33 4238 41 46 5348 5251
关于未来
这里未来相对来说比较容易。关于未来,只要起到提醒的作用就可以了。只要明白活动内容和日期,我们就很容易掌握将要到来的事情。你也可以指定具体的时间点,在未来的某时刻进行活动提醒。这里通过倒计时的方式显示,更容易让用户接受,一目了然。
如下图所示,对比昨天和今天视图,比较大的一个区别在于,多了一个活动详细。你可以通过点击某个活动,活动详细里就可以把详细信息显示出来,在这里你可以查看具体的日期。另外,你可以通过长按某个活动来对活动进行编辑和删除操作。
1 26 8 6612 2917 22 28 31 5738 44 51 56 64 65
1 29 10 11 13 14 3622 23 29 30 35
数据存储
谈完了数据的显示,再说说数据的存储。有关活动的数据都是存储在数据库当中的,相信做过Android开发的都不陌生,我也不班门弄斧了。
下面是建数据表的SQL语句,写在DatabaseHelper类中:
1 //创建任务表 2 private static String CREATE_TASK_TABLE_SQL = "CREATE TABLE IF NOT EXISTS " + TaskBean.TABLE_NAME + "(" 3 + TaskBean.ID + " INTEGER PRIMARY KEY," 4 + TaskBean.DATETIME + " TEXT," 5 + TaskBean.TASK_NAME + " TEXT," 6 + TaskBean.POSITION_NAME + " TEXT," 7 + TaskBean.TIME_ALERT_FLAG + " INTEGER," 8 + TaskBean.PRIORITY + " INTEGER," 9 + TaskBean.IF_COMPLETE + " INTEGER,"10 + TaskBean.REPEAT_DAYS + " INTEGER,"11 + TaskBean.IF_FUTURE+ " INTEGER,"12 + TaskBean.PARENT +" INTEGER)";
见名思义,通过上面的代码可以知道这个表中各个字段的含义,但我还是详细说一下。下面是task表的详细属性说明和表图:
Name | Comment | Default | DataType | P | F | M |
task_id | 任务编号 |
| INTEGER | √ |
| √ |
task_datetime | 任务时间 |
| TEXT |
|
|
|
task_name | 任务内容 |
| TEXT |
|
|
|
position_name | 任务地点 |
| TEXT |
|
|
|
time_alert | 是否提醒 |
| INTEGER |
|
|
|
task_priority | 任务优先级 |
| INTEGER |
|
|
|
if_complete | 是否完成 | INTEGER | ||||
repeat_days | 重复天数 | INTEGER | ||||
parent | 父亲编号 | INTEGER |
可能大家会比较好奇为什么会有一个parent字段。因为在今天视图中创建活动时可以设置活动周期,即重复天数。当用户创建了一个活动周期大于1天的活动时,后台数据库需要创建相同数量的记录,此时parent父亲编号同为当天活动的编号。这样在进行后续的修改和删除时根据repeat_days和parent这两个字段就可以有效地进行操作。
待续