智能移动终端应用开发
设计报告
(2013/2014学年第2学期)
题 目 : 电子相册 学 院 : 信息与电气工程学院 专 业 : 电子信息工程 姓 名 : 学 号 :
设计成绩 :
2014年5月15日
1 软件需求分析
本系统应该具有创建相册、浏览相片、上传相片、删除相册或相片、实现随机播放照片以及循环播放照片、可以添加图片的相关说明等功能,功能如图
图1 电子相册系统功能结构图
2 软件总体设计 2.1 软件介绍
电子相册是现在时下很流行的一种网络元素,它可以应用于很多的领域。制作好的电子相册可以在电脑上,各类影碟机上,以及手机和MP4里都能观看。当然,如果考虑到长期保存的话,也可以保存在硬盘上,也便于随时调阅、欣赏,永久保存。通过电子相册软件,我们的照片可以更加动态、更加多姿多彩的展现,刻录在光盘上保存,或在影碟机上播放。
电子相册是指可以在电脑上观赏的区别于CD/VCD的静止图片的特殊文档,其内容不局限于摄影照片,也可以包括各种艺术创作图片。电子相册具有传统相册无法比拟的优越性:图、文、声、像并茂的表现手法,随意修改编辑的功能,快速的检索方式,永不褪色的恒久保存特性,以及廉价复制分发的优越手段。
电子相册系统
创
建相册 浏览相片 上传相片
删除相册或相片
播放查看照片 添加图片说明
2.2 程序流程图
图2 电子相册系统功能流程图
2.3 程序界面
图3 电子相册程序主界面
图4 电子相册图片文件
图5 电子相册图片浏览
3 关键技术分析
制作电子相册首先要获得图片文件,通过拍摄,可以直接得到电子图片文件。电子相册分两种,一种是软件类型电子相册,一种是硬件类型电子相册。
本设计是属于硬件类型的电子相册,一些数码相框只能够显示JPEG这种通用格式的图片,也就是说有些高端产品也是可以显示比如png这类型的图片格式的。大多数数码相框是以幻灯片的形式显示照片的,通常可以通过调节切换时间间隔来达到满意的效果。某些相框还也可以通过互联网上的RSS,图片共享网站还有电子邮件这些媒介来加载图片。而具备这种网络功能的相框通常是支
持无线连接的。还有些其他的电子相框可以显示txt文件的。电子相框显示的图片文件通常是从手机存储卡读取的,尽管某些相框还提供内部存储。某些框架电子相框具备使用USB接口从电脑直接传输文件到电子相框的功能。然而,由于价格过高,一般很少有数码相框内置有记忆体的。其中一些人还包括一个或者是可充电电池的。因此,手机安卓版电子相册已经成为浏览图片的一种潮流。
4 软件详细设计 (1)创建相册
用户可以根据自己的需要来创建新的相册,把照片分类。
通过“相册主页”左侧的链接点击“创建相册”进入到“创建目录页面”,根据提示输入新创建的相册名称,选择创建,则新建相册成功,转到新建的相册里。 (2)浏览相册
用户可直接或用打开相册的方式浏览主页上的照片和相册里的照片 (3)上传相片
用户可以根据自己的需要上传照片。
通过“相册主页”左侧的链接点击“上传照片”进入到“上传照片页面”,根据提示输入选择上传方式。如果从本地上传,选择“浏览”在本地打开一张照片,点击“上传”则上传照片成功,否则提示“上传文件出错”。上传照片完成后,返回到相册主页或某相册。 (4)删除相片
用户可以根据自己的需要删除相册或照片。
每个相册和每张照片后面都有“删除”的字样,点击后会出现提示“是否删除”,选择确认则删除成功,返回相册主页;选择取消则无变化,返回相册主页。 (5)添加图片说明
用户可以根据自己的需要给已经上传的照片添加相应的说明。
选择所要浏览的图片后,在“添加你对照片的描述”文本框上,删除掉“添加你对照片的描述”,并写入你对图片的描述 (6)软件设计基本思路
gallery选中的图片在ImageView中显示出来,ImageView的一个View实际上就是一个ImageView,gllery的一个View也是一个ImageView.
//通过这个来进行循环 public int getCount() {
return Integer.MAX_VALUE; }
//制作View
public View getView(int position, View convertView, ViewGroup parent) { ImageView image=new ImageView(context);
image.setImageResource(preImages[position%preImages.length]); image.setScaleType(ImageView.ScaleType.FIT_XY);
image.setLayoutParams(new Gallery.LayoutParams(200, 120)); image.setBackgroundResource(typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0)); return image; }
//设置View的背景
typedArray = obtainStyledAttributes(R.styleable.Gallery);
image.setBackgroundResource(typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0)); //设置ImageSwitcher中的ImageView
switcher.setFactory(new ViewFactory(){ public View makeView() {
ImageView image=new ImageView(Scan_pic.this); image.setScaleType(ImageView.ScaleType.FIT_CENTER); image.setLayoutParams(new
ImageSwitcher.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
return image; } };
public class Scan_pic extends Activity { private ImageSwitcher switcher; private Gallery gallery;
private int[] preImages; private int[] afterImages; private int postion;
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.scanpic);
switcher=(ImageSwitcher)findViewById(R.id.imageSwitcher_scan_pic);
gallery=(Gallery)findViewById(R.id.gallery1_scan_pic); afterImages=new
int[]{R.drawable.after0,R.drawable.after1,R.drawable.after2,R.drawable.after3};
preImages=new
int[]{R.drawable.pre0,R.drawable.pre1,R.drawable.pre2,R.drawable.pre3}; gallery.setAdapter(new ImageAdapter(preImages,Scan_pic.this)); //设置gallery的项单击事件,更换ImagerSwitcher中的图片 gallery.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {
switcher.setImageResource(preImages[arg2%preImages.length]);
postion=arg2%preImages.length; } };
//设置ImageSwitcher中的ImageView switcher.setFactory(new ViewFactory(){ public View makeView() {
ImageView image=new ImageView(Scan_pic.this); image.setScaleType(ImageView.ScaleType.FIT_CENTER); image.setLayoutParams(new
ImageSwitcher.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
return image; } };
switcher.setOnClickListener(new OnClickListener(){ public void onClick(View v) {
Intent intent=new Intent(Scan_pic.this,StartGame.class); intent.putExtra("position", postion); startActivity(intent); } }; }
class ImageAdapter extends BaseAdapter{ int[] preImages; Context context; TypedArray typedArray;
public ImageAdapter(int[] preImages,Context context){ this.preImages=preImages; this.context=context;
typedArray = obtainStyledAttributes(R.styleable.Gallery); //设置Gallery中的ImageView即每一项的背景 }
public int getCount() {
return Integer.MAX_VALUE; //通过这个来进行循环 }
public Object getItem(int position) { return position; }
public long getItemId(int position) { return position; }
public View getView(int position, View convertView, ViewGroup parent) {
ImageView image=new ImageView(context);
image.setImageResource(preImages[position%preImages.length]); //通过这个来进行循环
image.setScaleType(ImageView.ScaleType.FIT_XY);
image.setLayoutParams(new Gallery.LayoutParams(200, 120)); image.setBackgroundResource(typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0));
return image;
}
}
}
5 软件测试方案
软件的基本功能都能实现,能实现基本的对手机里面的图片进行浏览,可以左右滑动,或者点击图片下方的按钮实现,如果不想一张张浏览,还可以像播放幻灯片一样的效果来浏览所有图片,点击播放键能实现该功能;点击下方删除键可以实现对图片的删除,对于文件夹,按住不动会出现删除或者返回的选项;如果要对某张图片添加备注或者解释,点击下方按钮实现添加说明功能,直接进行文字的添加或者删除,添加完后返回就立即保存,等要查看图片的说明时,直接双击图片就能出现已经添加的文字说明;不光图片来自手机拍摄,有时候需要上传其它地方来的图片或者相册文件夹,软件也同样可以创建相册,上传照片等。
由于系统版本和硬件的原因而导致程序的意外终止,程序代码上存在读写和存取效率的问题,这些问题在日后的编码过程中是能够完全改善的,测试过程中所出现的问题完全不会影响程序的正常运行。
6 设计总结
通过两周的设计,收获颇丰,我有了学习上的成果的喜悦,在课堂上学java编程,但是那些都是学的皮毛而已,没有真正应用到实际例子中,也很难发现自己的不足,这次设计电子相册,知识得到了扩充,认识得到了加深,也使得我们的自学能力得到了很大的提高,在此,我向老师表示 10
由衷地感谢。
这次学习让我对安卓开发又有了新的认识,我们必需边总结边学习,遇到问题要虚心请教老师,学习知识的过程其实就是相互学习相互进步的过程。有些知识点以前没有学过,但我也没有去研究,做设计才突然间觉得自己真的有点无知,虽然现在去看依然可以解决问题,但要浪费许多时间,这一点是我必须在以后的学习中加以改进的地方,同时也要督促自己在学习的过程中不断的完善自我。
我从前觉得以为只要程序编得能够好就行,很少有意识的训练自己对整个系统的设计。而且每次课程题目都是急于编码,根本不从整体考虑系统和设计。显然,这种方法是不可取得,若是一个小程序还可以,但是涉及到稍微大一些的项目时,就会出现顾此失彼,多次返工,最后会心有余而力不足,使整个系统以失败结束。
在这次系统设计中我深刻体会到以下三点:
(1)需求分析是以后设计和实现能顺利进行的保证和依据。需求分析必须认真做好,为以后设计和实现奠定好的基础。
(2)不要急于做总体设计,也不要忽略总体设计的重要性。在做总体设计之前一定要对所做系统有个清楚地认识,也要对开发系统得技术尤其是关键技术有清楚的认识,然后选择设计模式或设计思想,这样可以避免把系统复杂化或过于简单化。
(3)整体规划或总体设计不必过于注重实现细节。在做总体设计时不要一味的把某个功能具体到实现,不要老是把精力放在怎么实现上,而是要放在怎样完整的抽象整个系统上。
总之,由于在这两个星期内,学到了很多,个人的知识水平和经验都增长了许多,本设计中可能存在很多的问题,我会在今后的学习中逐步加强。
7 参考资料
[1]李艳丽. Android事件处理过程剖析 [N] 长春理工大学学报 2009
[2]孙卫琴. java面向对象编程 [N] 电子工业出版社 2006年7月
[3]马越. Android的架构与应用[D]中国地质大学(北京), 2008 .
[4]叶炳发. Android操作系统移植及关键技术研究[D]暨南大学, 2010 .
[5]岳传真. Android系统移植和应用程序开发[D]复旦大学, 2010 .
[6]陈勋. 基于android平台的资源管理器设计[D]电子科技大学,2011
11
智能移动终端应用开发
设计报告
(2013/2014学年第2学期)
题 目 : 电子相册 学 院 : 信息与电气工程学院 专 业 : 电子信息工程 姓 名 : 学 号 :
设计成绩 :
2014年5月15日
1 软件需求分析
本系统应该具有创建相册、浏览相片、上传相片、删除相册或相片、实现随机播放照片以及循环播放照片、可以添加图片的相关说明等功能,功能如图
图1 电子相册系统功能结构图
2 软件总体设计 2.1 软件介绍
电子相册是现在时下很流行的一种网络元素,它可以应用于很多的领域。制作好的电子相册可以在电脑上,各类影碟机上,以及手机和MP4里都能观看。当然,如果考虑到长期保存的话,也可以保存在硬盘上,也便于随时调阅、欣赏,永久保存。通过电子相册软件,我们的照片可以更加动态、更加多姿多彩的展现,刻录在光盘上保存,或在影碟机上播放。
电子相册是指可以在电脑上观赏的区别于CD/VCD的静止图片的特殊文档,其内容不局限于摄影照片,也可以包括各种艺术创作图片。电子相册具有传统相册无法比拟的优越性:图、文、声、像并茂的表现手法,随意修改编辑的功能,快速的检索方式,永不褪色的恒久保存特性,以及廉价复制分发的优越手段。
电子相册系统
创
建相册 浏览相片 上传相片
删除相册或相片
播放查看照片 添加图片说明
2.2 程序流程图
图2 电子相册系统功能流程图
2.3 程序界面
图3 电子相册程序主界面
图4 电子相册图片文件
图5 电子相册图片浏览
3 关键技术分析
制作电子相册首先要获得图片文件,通过拍摄,可以直接得到电子图片文件。电子相册分两种,一种是软件类型电子相册,一种是硬件类型电子相册。
本设计是属于硬件类型的电子相册,一些数码相框只能够显示JPEG这种通用格式的图片,也就是说有些高端产品也是可以显示比如png这类型的图片格式的。大多数数码相框是以幻灯片的形式显示照片的,通常可以通过调节切换时间间隔来达到满意的效果。某些相框还也可以通过互联网上的RSS,图片共享网站还有电子邮件这些媒介来加载图片。而具备这种网络功能的相框通常是支
持无线连接的。还有些其他的电子相框可以显示txt文件的。电子相框显示的图片文件通常是从手机存储卡读取的,尽管某些相框还提供内部存储。某些框架电子相框具备使用USB接口从电脑直接传输文件到电子相框的功能。然而,由于价格过高,一般很少有数码相框内置有记忆体的。其中一些人还包括一个或者是可充电电池的。因此,手机安卓版电子相册已经成为浏览图片的一种潮流。
4 软件详细设计 (1)创建相册
用户可以根据自己的需要来创建新的相册,把照片分类。
通过“相册主页”左侧的链接点击“创建相册”进入到“创建目录页面”,根据提示输入新创建的相册名称,选择创建,则新建相册成功,转到新建的相册里。 (2)浏览相册
用户可直接或用打开相册的方式浏览主页上的照片和相册里的照片 (3)上传相片
用户可以根据自己的需要上传照片。
通过“相册主页”左侧的链接点击“上传照片”进入到“上传照片页面”,根据提示输入选择上传方式。如果从本地上传,选择“浏览”在本地打开一张照片,点击“上传”则上传照片成功,否则提示“上传文件出错”。上传照片完成后,返回到相册主页或某相册。 (4)删除相片
用户可以根据自己的需要删除相册或照片。
每个相册和每张照片后面都有“删除”的字样,点击后会出现提示“是否删除”,选择确认则删除成功,返回相册主页;选择取消则无变化,返回相册主页。 (5)添加图片说明
用户可以根据自己的需要给已经上传的照片添加相应的说明。
选择所要浏览的图片后,在“添加你对照片的描述”文本框上,删除掉“添加你对照片的描述”,并写入你对图片的描述 (6)软件设计基本思路
gallery选中的图片在ImageView中显示出来,ImageView的一个View实际上就是一个ImageView,gllery的一个View也是一个ImageView.
//通过这个来进行循环 public int getCount() {
return Integer.MAX_VALUE; }
//制作View
public View getView(int position, View convertView, ViewGroup parent) { ImageView image=new ImageView(context);
image.setImageResource(preImages[position%preImages.length]); image.setScaleType(ImageView.ScaleType.FIT_XY);
image.setLayoutParams(new Gallery.LayoutParams(200, 120)); image.setBackgroundResource(typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0)); return image; }
//设置View的背景
typedArray = obtainStyledAttributes(R.styleable.Gallery);
image.setBackgroundResource(typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0)); //设置ImageSwitcher中的ImageView
switcher.setFactory(new ViewFactory(){ public View makeView() {
ImageView image=new ImageView(Scan_pic.this); image.setScaleType(ImageView.ScaleType.FIT_CENTER); image.setLayoutParams(new
ImageSwitcher.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
return image; } };
public class Scan_pic extends Activity { private ImageSwitcher switcher; private Gallery gallery;
private int[] preImages; private int[] afterImages; private int postion;
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.scanpic);
switcher=(ImageSwitcher)findViewById(R.id.imageSwitcher_scan_pic);
gallery=(Gallery)findViewById(R.id.gallery1_scan_pic); afterImages=new
int[]{R.drawable.after0,R.drawable.after1,R.drawable.after2,R.drawable.after3};
preImages=new
int[]{R.drawable.pre0,R.drawable.pre1,R.drawable.pre2,R.drawable.pre3}; gallery.setAdapter(new ImageAdapter(preImages,Scan_pic.this)); //设置gallery的项单击事件,更换ImagerSwitcher中的图片 gallery.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {
switcher.setImageResource(preImages[arg2%preImages.length]);
postion=arg2%preImages.length; } };
//设置ImageSwitcher中的ImageView switcher.setFactory(new ViewFactory(){ public View makeView() {
ImageView image=new ImageView(Scan_pic.this); image.setScaleType(ImageView.ScaleType.FIT_CENTER); image.setLayoutParams(new
ImageSwitcher.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
return image; } };
switcher.setOnClickListener(new OnClickListener(){ public void onClick(View v) {
Intent intent=new Intent(Scan_pic.this,StartGame.class); intent.putExtra("position", postion); startActivity(intent); } }; }
class ImageAdapter extends BaseAdapter{ int[] preImages; Context context; TypedArray typedArray;
public ImageAdapter(int[] preImages,Context context){ this.preImages=preImages; this.context=context;
typedArray = obtainStyledAttributes(R.styleable.Gallery); //设置Gallery中的ImageView即每一项的背景 }
public int getCount() {
return Integer.MAX_VALUE; //通过这个来进行循环 }
public Object getItem(int position) { return position; }
public long getItemId(int position) { return position; }
public View getView(int position, View convertView, ViewGroup parent) {
ImageView image=new ImageView(context);
image.setImageResource(preImages[position%preImages.length]); //通过这个来进行循环
image.setScaleType(ImageView.ScaleType.FIT_XY);
image.setLayoutParams(new Gallery.LayoutParams(200, 120)); image.setBackgroundResource(typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0));
return image;
}
}
}
5 软件测试方案
软件的基本功能都能实现,能实现基本的对手机里面的图片进行浏览,可以左右滑动,或者点击图片下方的按钮实现,如果不想一张张浏览,还可以像播放幻灯片一样的效果来浏览所有图片,点击播放键能实现该功能;点击下方删除键可以实现对图片的删除,对于文件夹,按住不动会出现删除或者返回的选项;如果要对某张图片添加备注或者解释,点击下方按钮实现添加说明功能,直接进行文字的添加或者删除,添加完后返回就立即保存,等要查看图片的说明时,直接双击图片就能出现已经添加的文字说明;不光图片来自手机拍摄,有时候需要上传其它地方来的图片或者相册文件夹,软件也同样可以创建相册,上传照片等。
由于系统版本和硬件的原因而导致程序的意外终止,程序代码上存在读写和存取效率的问题,这些问题在日后的编码过程中是能够完全改善的,测试过程中所出现的问题完全不会影响程序的正常运行。
6 设计总结
通过两周的设计,收获颇丰,我有了学习上的成果的喜悦,在课堂上学java编程,但是那些都是学的皮毛而已,没有真正应用到实际例子中,也很难发现自己的不足,这次设计电子相册,知识得到了扩充,认识得到了加深,也使得我们的自学能力得到了很大的提高,在此,我向老师表示 10
由衷地感谢。
这次学习让我对安卓开发又有了新的认识,我们必需边总结边学习,遇到问题要虚心请教老师,学习知识的过程其实就是相互学习相互进步的过程。有些知识点以前没有学过,但我也没有去研究,做设计才突然间觉得自己真的有点无知,虽然现在去看依然可以解决问题,但要浪费许多时间,这一点是我必须在以后的学习中加以改进的地方,同时也要督促自己在学习的过程中不断的完善自我。
我从前觉得以为只要程序编得能够好就行,很少有意识的训练自己对整个系统的设计。而且每次课程题目都是急于编码,根本不从整体考虑系统和设计。显然,这种方法是不可取得,若是一个小程序还可以,但是涉及到稍微大一些的项目时,就会出现顾此失彼,多次返工,最后会心有余而力不足,使整个系统以失败结束。
在这次系统设计中我深刻体会到以下三点:
(1)需求分析是以后设计和实现能顺利进行的保证和依据。需求分析必须认真做好,为以后设计和实现奠定好的基础。
(2)不要急于做总体设计,也不要忽略总体设计的重要性。在做总体设计之前一定要对所做系统有个清楚地认识,也要对开发系统得技术尤其是关键技术有清楚的认识,然后选择设计模式或设计思想,这样可以避免把系统复杂化或过于简单化。
(3)整体规划或总体设计不必过于注重实现细节。在做总体设计时不要一味的把某个功能具体到实现,不要老是把精力放在怎么实现上,而是要放在怎样完整的抽象整个系统上。
总之,由于在这两个星期内,学到了很多,个人的知识水平和经验都增长了许多,本设计中可能存在很多的问题,我会在今后的学习中逐步加强。
7 参考资料
[1]李艳丽. Android事件处理过程剖析 [N] 长春理工大学学报 2009
[2]孙卫琴. java面向对象编程 [N] 电子工业出版社 2006年7月
[3]马越. Android的架构与应用[D]中国地质大学(北京), 2008 .
[4]叶炳发. Android操作系统移植及关键技术研究[D]暨南大学, 2010 .
[5]岳传真. Android系统移植和应用程序开发[D]复旦大学, 2010 .
[6]陈勋. 基于android平台的资源管理器设计[D]电子科技大学,2011
11