心情日记app总结 数据存储+服务+广播+listview+布局+fragment+intent+imagebutton+tabactivity+美工
---恢复内容开始---
结果截图如下:
第一张图是程序主界面,主要是显示记事列表的一些个事件。旁边的侧拉框是自己登陆用的。可以设置密码。可以查看反馈与关于等信息。
点击第一张图片下方的图标,会显示不同的内容,分别如下:
这四张图分别是添加心情,统计心情记录,设置闹铃,开启音乐。分别对应 添加心情模块、统计心情记录模块、铃声提醒模块、音乐播放器模块
按我的想法,此款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+美工的更多相关文章
- 趁五一撸个纯Flutter版的心情日记App
前言 最近真的是太忙了,只能趁着五一期间把之前Android版的心情日记App移植到Flutter平台,并且已经上架华为应用市场以及苹果App Store. 整体框架沿用了两个星期,用Flutter撸 ...
- 深入Android媒体存储服务(一):APP与媒体存储服务的交互
简介: 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 APP 新增或修改的文 ...
- 移动互联网实战--资源类APP的数据存储处理和优化
前言: 对于资源类的APP, 其音频/图形占据了APP本身很大的比例. 如何存储和管理这些资源文件, 成了一个颇具挑战性的难点. 移动端的碎片化, 高中低端手机的并存, 需要开发者不光是具备基础的存储 ...
- wp8.1 Study10:APP数据存储
一.理论 1.App的各种数据在WP哪里的? 下图很好介绍了这个问题.有InstalltionFolder, knownFolder, SD Card... 2.一个App的数据存储概览 主要分两大部 ...
- 专题合集:深入Android媒体存储服务
Android 有一套媒体存储服务,进程名是 android.process.media,主要负责把磁盘中的文件信息保存到数据库当中,供其他 APP 使用以及 MTP 模式使用.这里包含了数据库管理. ...
- 使用.NET 6开发TodoList应用(4)——引入数据存储
需求 作为后端CRUD程序员(bushi,数据存储是开发后端服务一个非常重要的组件.对我们的TodoList项目来说,自然也需要配置数据存储.目前的需求很简单: 需要能持久化TodoList对象并对其 ...
- Microsoft Azure 云存储服务概念
本文包括了以下几点内容: 什么是Azure云存储服务? 云存储服务分类 云存储服务的优势 什么是Azure云存储服务? Azure 云存储服务可以说是Azure 上最重要的SAAS服务了. 在Azur ...
- 阿里云的NoSQL存储服务OTS的应用分析
这篇文章主要介绍了阿里云的NoSQL存储服务OTS的应用分析,OTS作为阿里巴巴开发的NoSQL存储技术服务现已面向用户商业化,需要的朋友可以参考下. 1. 概要 OTS是构建在阿里云飞天分布式系统 ...
- Storage,Memcache,KVDB都是存储服务,如何区分何时用何种服务
Storage :是SAE为开发者提供的分布式文件存储服务,用来存放用户的持久化存储的文件.用户需要先在在线管理平台创建Domain(相当于一级子目录). Storage为开发者提供分布式文件存 ...
随机推荐
- shell-code-5-流程控制
××××××××××××××××××××IF-ELSE×××××××××××××××××××××××××××××× a=1b=2if [ $a == $b ]then echo a等于belif [ ...
- PAT Basic 1071
1071 小赌怡情 常言道“小赌怡情”.这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算机给出第二个数.若玩家猜对了,则 ...
- HDU 3507 斜率优化 DP Print Article
在kuangbin巨巨博客上学的. #include <iostream> #include <cstdio> #include <cstring> #includ ...
- Luogu【P2065】贪心的果农(DP)
题目链接 几乎所有DP题目前本蒟蒻都没有思路.当然包括但不限于这道题.每次都是看了题解然后打的(等价于抄题解)很羞耻 这道题经思考发现,越靠前砍的果树长果子的能力一定越弱,如果长果子的能力一样弱就先把 ...
- BZOJ 1069 [SCOI2007]最大土地面积 ——计算几何
枚举对角线,然后旋转卡壳即可. #include <map> #include <cmath> #include <queue> #include <cstd ...
- day2之爬取拉勾网
认证流程 浏览器清空cookies 步骤一 访问拉勾网网站 https://www.lagou.com/ 做了些什么: 以get方式请求"https://www.lagou.com/&qu ...
- 火柴排队(codevs 3286)
题目描述 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:,其中 ai表示第一列 ...
- 【AIM Tech Round 5 (Div. 1 + Div. 2) 】
A:https://www.cnblogs.com/myx12345/p/9844152.html B:https://www.cnblogs.com/myx12345/p/9844205.html ...
- msp430项目编程33
msp430中项目---简易示波器系统 1.电路工作原理 2.代码(显示部分) 3.代码(功能实现) 4.项目总结
- R语言入门--画图(一)--ggplot2
先写一些需要用到的知识点,比如包.函数 dplyr 很好用的包 经常与ggplot2连用 mutate:用于对数据框的列进行重新处理,或者用处理的结果添加新列 数据清洗: 1.na.omit() ...