---恢复内容开始---

结果截图如下:

第一张图是程序主界面,主要是显示记事列表的一些个事件。旁边的侧拉框是自己登陆用的。可以设置密码。可以查看反馈与关于等信息。

点击第一张图片下方的图标,会显示不同的内容,分别如下:

这四张图分别是添加心情,统计心情记录,设置闹铃,开启音乐。分别对应  添加心情模块、统计心情记录模块、铃声提醒模块、音乐播放器模块

按我的想法,此款app主要用来记录心情,而且可以边播放音乐边写日志。而且,还可以通过闹铃提醒我们写日志。而且,还可以统计我们最近的心情状态,为及时调整工作状态提供参考的依据。

当然,此款app还有些其他一些小功能,比如日志的删除,编辑,等等。不再说了。

下面我说说缺点:

经过测试我发现:

1、在第四个功能模块中,也就是音乐播放器上,暂停按钮用不了,逻辑上不好实现,因为底层是用service做的,所以,不太好实现。

2、音乐播放器模块中,现在还只是简单的加载手机当中的音乐,没有实现在线音乐播放。

3、在侧拉界面,由于时间问题,没有把分享好友这个功能集成上去,按我的思路,可以借用友盟的社会化组件集成一下,不过这个需要到不同的平台申请appkey,感觉很麻烦,就没有做了,假如后期有时间的话,这个有必要开发一下。

4、对于第三个功能模块----铃声提醒模块,没有做铃声选择功能,按理说,响铃是可以用户设置的,感觉此款app的主要功能不在于此,所以就没做了。

5、对于第二个功能模块----统计心情记录模块,我们可以查看心情轨迹,但没有添加相应的建议,比如当你一个月当中bad的居多,没有加一些鼓舞人心的词语。

6、对于第一个功能模块----添加心情模块,此模块可能可以添加的笑脸等图标太少,没有给出很多。后期可能会添加一些其他搞笑点的图标进去。

缺点说完了,我现在扯一下,可以实现的功能:

主要来说,此款app由5个界面组成:主界面+4个功能界面组成。

主界面:主要用于显示心情记录的一些个信息,左边侧拉框可以设置密码,退出等一些小的功能。

添加心情模块:主要用于记录当日的心情状态,下面的笑脸可以增减,当然也可以添加表情。

统计心情记录模块:主要用于统计心情轨迹,一个是直方图展示,一个是折线图展示。

铃声提醒模块:主要用于提醒用户什么时候记录心情,当然,也可以当闹钟使用。

音乐播放器:主要用于边写日志,边听音乐。音乐都是后台播放。

界面设计:

只举一个例子来做介绍:

拿主界面来做介绍:

整个界面有一个大的LinearLayout线性布局+一个include(其实这个是一个嵌套的布局,就是实现上面的标题效果)+一个listview+嵌套一个LinearLayout(用此线性布局的原因是因为用它可以来实现下面这四个小图标的对齐)+四个ImageButton.

具体就这么多。代码如下:(折叠按钮可以打开)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background"
android:orientation="vertical" > <include layout="@layout/common_title_bg" /> <ListView
android:id="@+id/mood_note_list"
android:layout_width="fill_parent"
android:layout_height="400dp"
android:cacheColorHint="#00000000"
android:divider="@drawable/line"
android:dividerHeight="1dp"
android:drawSelectorOnTop="false"
android:fadingEdge="none"
android:fastScrollEnabled="true"
android:scrollbars="vertical"
>
</ListView> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" > <ImageButton
android:id="@+id/addMoodButton"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:src="@drawable/write" /> <ImageButton
android:id="@+id/mood_tendency"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:src="@drawable/tongji" />
<ImageButton
android:id="@+id/clock"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:src="@drawable/clock" /> <ImageButton
android:id="@+id/music"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:src="@drawable/music" />
</LinearLayout>
</LinearLayout>

界面不多讲,本人审美能力有限,没办法。

对于界面设计这块,归纳起来就是 活用背景,以及各个组件之间的关系,最好多嵌套,方便布局。总的原则就是,看起来直观,灵活性强。关注组间与组内的联系即可。

作品实现、特色和难点分析:

下面我选择性的讲解其中一部分功能的实现机制,篇幅有限。其他没介绍到的我就点到为止。

打开app,首先显示3s的延迟,然后进入主界面。主界面是一个FragementActivity,日记显示部分,主要用到了数据库的查询操作,然后将查询到的内容,通过适配器显示在listview中。当然,按住某一栏不动,还会出现删除、查看等menu选项。主要就是数据库的增删改查操作。对于设置初始密码,由AlertDialog实现。如果没有设置密码,点击Menu中选项会启动该对话框。两次密码输入一致时,对输入字符串 经由MD5加密后存储在SharedPreference中,密码添加成功。左边侧拉菜单也是一个fragment,里面其他的都是通过xml实现的,不多讲。

点击主界面的第一个imagebutton按钮,此模块功能主要是添加新的心情记录。用户输入心情内容,选择心情图片并为心情打分。通过activity实现的,当然此activity也是查看记事的activity,如果从查看记事转向过来,则直接显示相应的记事内容。这样的话,就会涉及到数据库的一些个操作,通过游标cursor实现。

下面讲讲数据库的设计:

此数据库的实现在com.hlb.app 包中的MoodLogProvider类中实现。数据库的名称为MoodLogDB.db,总共就一张表:字段如下:

_ID:表示第几条心情记录   数据类型 int

MOODITEM:  心情内容             String

TIMESTAMP:心情记录的时间戳   long

ICON_ID:心情的图片列名         int

RATING:  心情的分数列名        float

对于第二个功能模块,主要也是一个Activity,名称为ChartTabActivity,功能是统计分析心情的主Activity,继承了TabActivity,并添加LineChartActivity和BarChartActivity。其中,LineChartActivity主要功能是将数据库中存储的对应月份所有心情记录得分绘成曲线图,向用户显示该月份的心情走势。图表的绘制主要通过GraphicalView等类实现的。

对于第三个功能模块,主界面是一个activity,闹钟的设置用到了系统自带的AlarmManager类实现的。它可以专门用来设定一个时间去完成指定的动作或者事件。单机“定制闹钟”按钮,调用TimePickerDialog来设置时间,然后提示用户设置完成,当闹钟到设置的时间点时,提示用户时间到。当然,这里面用到了BroadcastReceive服务,系统是广播的发出者,此app为广播接收者,时间一到,此app开始响应此事件。然后完成响应的动作。当时想着,时间到了,应该用铃声来提示用户,所以时间一到,就开始播放音乐,10s后停住。代码如下:

package com.hlb.alarm;

import com.hlb.R;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.widget.Toast;
public class TimeReceive extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent)
{
MediaPlayer alarmMusic = MediaPlayer.create(context,R.raw.test);
alarmMusic.start();
Toast.makeText(context, "你的时间到了!!!", 10).show();
try
{
Thread.currentThread().sleep(10000); //延时10s
} catch (InterruptedException e)
{
e.printStackTrace();
}
alarmMusic.stop();
}
}

对于第四个功能模块,同样也是一个activity,思路就是先通过遍历用户数据库,加载音乐资源文件信息到一个list集合当中,每个元素为一个Mp3Info类的实例化,然后自定义MyMusicAdapter适配器,将list当中的数据加载到listview当中。对于listview当中的每一个元素,只要点击就可以播放,当然也可以通过下方的播放按钮实现。点击停止按钮停止播放。

对于特色:

个人觉得:

1、可以实现自定义式的心情记录

2、可以绘制心情轨迹,统计一个月或者近几个月的心情。这会方便我们工作于生活的需要。

3、我们可以一边听音乐一边写日记。

4、隐私工作做得好,我们可以设置密码,防止别人偷看你的日记。

5、我们还可以定时提醒自己写日记,谨防自己忘记。

6、第三与第四个功能模块,可以单独使用。简单,方便,快捷。

对于难点有很多,下面仅举几个小难点:

1、绘图。之前,这一块没怎么接触,后来,慢慢看别人的小demo,慢慢实现。

2、如何后台播放音乐。第一版程序没有实现此功能,好来发现,然后通过service终于实现之。

3、响铃。如何选择自己有个性的响铃,到现在还没实现,只能播放一种我预先设置好响铃。

4、自定义适配器。之前都是用的系统提供的适配器,在此app中,音乐播放器模块貌似不行。

5、背景。如何选择好的背景图片,自然,协调,有创意,这是个难点。

6、切图。图片选择不太完好,网上的图片都不太符合规范,缩小之后又失真,这是个问题。然后推荐给大家一个好的切图工具------光影魔术手

7、从SD卡加载音乐。刚开始是通过遍历SD卡实现的,不过速度慢的吓人。后来,通过数据库就快多了。

最后,介绍下本项目的基本情况,没有用到第三方代码库,都是Android里面的库。

参考文档:http://158067568.iteye.com/blog/941338    TabActivity实现多页显示效果

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=205314     使用Android Lint Checks使你的应用更健壮

http://www.cnblogs.com/angeldevil/p/3725358.html   清除Android工程中没用到的资源

http://blog.csdn.net/a7a9a68/article/details/7778752     textview字体颜色设置

http://blog.csdn.net/sutaizi/article/details/6537330         Android学习笔记(三) 开发自己的简易MP3播放器

http://www.it165.net/pro/html/201404/12667.html       Android音乐播放器(2)从SD卡中读取音乐

http://www.apkbus.com/forum.php?mod=viewthread&tid=42937&highlight=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE%E5%99%A8  Android音乐播放器资源

资源下载:

http://pan.baidu.com/s/1pJI5RPD     心情笔记app源码下载地址

心情日记app总结 数据存储+服务+广播+listview+布局+fragment+intent+imagebutton+tabactivity+美工的更多相关文章

  1. 趁五一撸个纯Flutter版的心情日记App

    前言 最近真的是太忙了,只能趁着五一期间把之前Android版的心情日记App移植到Flutter平台,并且已经上架华为应用市场以及苹果App Store. 整体框架沿用了两个星期,用Flutter撸 ...

  2. 深入Android媒体存储服务(一):APP与媒体存储服务的交互

    简介: 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 APP 新增或修改的文 ...

  3. 移动互联网实战--资源类APP的数据存储处理和优化

    前言: 对于资源类的APP, 其音频/图形占据了APP本身很大的比例. 如何存储和管理这些资源文件, 成了一个颇具挑战性的难点. 移动端的碎片化, 高中低端手机的并存, 需要开发者不光是具备基础的存储 ...

  4. wp8.1 Study10:APP数据存储

    一.理论 1.App的各种数据在WP哪里的? 下图很好介绍了这个问题.有InstalltionFolder, knownFolder, SD Card... 2.一个App的数据存储概览 主要分两大部 ...

  5. 专题合集:深入Android媒体存储服务

    Android 有一套媒体存储服务,进程名是 android.process.media,主要负责把磁盘中的文件信息保存到数据库当中,供其他 APP 使用以及 MTP 模式使用.这里包含了数据库管理. ...

  6. 使用.NET 6开发TodoList应用(4)——引入数据存储

    需求 作为后端CRUD程序员(bushi,数据存储是开发后端服务一个非常重要的组件.对我们的TodoList项目来说,自然也需要配置数据存储.目前的需求很简单: 需要能持久化TodoList对象并对其 ...

  7. Microsoft Azure 云存储服务概念

    本文包括了以下几点内容: 什么是Azure云存储服务? 云存储服务分类 云存储服务的优势 什么是Azure云存储服务? Azure 云存储服务可以说是Azure 上最重要的SAAS服务了. 在Azur ...

  8. 阿里云的NoSQL存储服务OTS的应用分析

    这篇文章主要介绍了阿里云的NoSQL存储服务OTS的应用分析,OTS作为阿里巴巴开发的NoSQL存储技术服务现已面向用户商业化,需要的朋友可以参考下. 1. 概要  OTS是构建在阿里云飞天分布式系统 ...

  9. Storage,Memcache,KVDB都是存储服务,如何区分何时用何种服务

    Storage :是SAE为开发者提供的分布式文件存储服务,用来存放用户的持久化存储的文件.用户需要先在在线管理平台创建Domain(相当于一级子目录).    Storage为开发者提供分布式文件存 ...

随机推荐

  1. 杭电 1503 Advanced Fruits

    Description The company "21st Century Fruits" has specialized in creating new sorts of fru ...

  2. POJ-1061 青蛙的约会 (扩展欧几里得)

    [题目描述] 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有 ...

  3. android 之 ListView相关

    ListView是一种列表视图,其将ListAdapter所提供的各个控件显示在一个垂直且可滚动的列表中.需要注意的为创建适配器并将其设置给ListView. 1.ArrayAdapter Array ...

  4. HDU 3947 River Problem

    River Problem Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ...

  5. 【Luogu】P2051中国象棋(DP)

    题目链接 去看STDCALL的题解吧 #include<cstdio> #include<cctype> #define mod 9999973 inline long lon ...

  6. HackerRank# Bricks Game

    原题地址 DP很简单,懒得压缩空间了,反正都能过 #include <cmath> #include <cstdio> #include <vector> #inc ...

  7. BZOJ1922 [Sdoi2010]大陆争霸 【最短路】

    题目 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光明和永恒的神斯普林 ...

  8. Java 线程池的原理与实现学习(二)

    java类库中提供的线程池简介: java提供的线程池更加强大,相信理解线程池的工作原理,看类库中的线程池就不会感到陌生了. execute(Runnable command):履行Ruannable ...

  9. 做运动(Dijkstra+并查集+MST)

    上面的题解是这样,这道题我真的脑残,其实打代码的时候就意识到了许多,可以用Dfs+Dij+二分,这样还可以卡一卡 但是我打了spfa+spfa+二分,这个显然很慢,类似的题目我好像还做过一道的,就是在 ...

  10. Linux(9):期中架构(1)--- 集群构架 & 备份服务

    01. 了解集群架构服务器组成 基本架构组成:(用于让用户进行访问) # 前端服务部分: 1)顾客-用户 是一个访问者,请求访问网站页面 2)保安-防火墙设备 对访问架构用户进行策略控制,正常访问网站 ...