版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计设计题目:系别:专业班级:指导老师:学生姓名:2013年5月18日摘要:在21世纪的今天,手机几乎是每个人的必备品,特别是在高校的学生,不管是吃饭、睡觉、还是上课,手机总是不离手。而且手机更新换代更是日新月异,然后在现在的手机市场中android系统的智能机成为主流。我们这款画画小软件正是在android系统的平台上进行运行。在日常生活中,我们画画只能在纸上的时代已经过去,这款android小画家画画软件,可以进行简单的简笔画操作、上色。既节约了增加了我们平时的乐趣,也节约了资源。该软件具有改变画图的形状、改变画笔的颜色、改变画刷的宽度、改变画画的风格、以及保存、清除等功能。经过测试,这是一款能为我们生活增加乐趣的软件。关键字:手机;android;画画软件目录TOC\o"1-5"\h\z第一章引言-1-发展情况-1-研究现状-1-研究前景展望-1-选题的目白及意义-2-第二章系统可行性分析-3-经济可行性分析-3-操作可行性分析-3-技术可行性分析-3-eclipse概述-3-ADT概述-4-androidSDK概述-4-java概述-5-第三章需求分析-6-软件功能描述-6-系统功能分析-7-软件需求分析-9-软件概念结构设计-9-第四章软件详细设计-12-软件设计原理-12-软件模块设计-12-第五章软件测试-30-总结-31-参考文献-32-致ft-33-第一章引言发展情况在现在这个手机普及的时代,各种手机软件也是层出不穷,尤其是在这两年的飞速发展,android软件可以是说席卷各大手机软件网站,为android软件开发者既带来了收入的回报,也提出了技术的挑战。android系统这个平台以成为智能手机系统的核心,也是IT技术行业、智能手机制造行业高度重视的。随着android系统的不断更新,现在功能各方面已经非常强大,这不仅是一台手机这么简单,而是一个移动终端。各种软件都有几乎都有android系统的版本。同时用户现在不仅要求手机有传统手机的功能,现在必须更加具有娱乐性以及休闲性。抓住现在用户的这个心理状态,于是android平台上运行的小画家画画软件就运营而生了。研究现状就目前的android系统智能手机在市场的占有率来看,又tandroid系统手机软件的开发具有非常广阔的前景。虽然在IT行业中都处于一个饱和的状态,但是在android系统手机软件开发这一方面又处于紧缺的状态,因为现在的手机用户拿起手机不仅仅是只用来打打电话,发发短信这么简单,用户更加追求的是手机的娱乐性和休闲性。说的更加简单明了一点就是,用户在无聊的时候可以用手机来消遣时间。android系统自2009年2月发布的androidl.1开始已经有4年的发展历史。然而在这短短四年时间就可以成为智能手机市场的领头羊,那么对于我们开发android系统手机的软件,也是同样具有广阔的市场。研究前景展望随着android系统智能手机的诞生,android系统打破了前些年智能手机的垄断的传统市场。同时android系统的手机软件占据的手机软件市场的比例越来越大,那么我们开发的画画涂鸦软件是基于android系统的,可以说是具有广阔的发展前景。而且现在用户对手机软件是否具有娱乐性有非常强的选择性,用户对于空闲时间的消遣,还有即时聊天需要发送一个手绘涂鸦图片的需要,那么对我们这款软件的选择是非常有用的。对于小画家手机软件具有一下优点:(1)喜爱画画的用于,无论是在车上,还是站台等车,都可以随时随地的进行简笔画画画的操作。(2)可以将画好的图片保存通过即时聊天工具发给好朋友分享自己的作品。(3)在手机上画可以节约资源,在环保的角度,起到节能减排的效果。选题的目的及意义为了巩固在大学三年所学的知识,达到学以并用的目的,作为四川工商职业技术学院信息工程系软件班大三的毕业生,希望在离开自己母校的时候能够把自己所学的知识能够做一次全面的巩固和提高,我的选题意义如下:随着android系统的不断升级,android系统智能手机的各种软件对各方面的影响越来越大,并且android系统成为以后移动智能客户终端的可能性同时也越来越大,那么未来android系统主导智能手机市场也是必然的发展趋势。那么我们开发的这款画画小软件也是顺应时代发展的潮流,在传统的按键手机,我们不能做出这个灵活的画画涂鸦软件,现在我们借助android系统这个平台来实现了这一功能。这样不仅提高图片的趣味性;建立生动有趣的图片处理平台,而且还提高手机的利用率。何乐而不为呢。第二章系统可行性分析可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。可行性研究的目的不是解决问题,而是确定问题是否值得去解决。可行性研究就是进行一次大大压缩简化了的系统分析和软件设计过程,也就是在较高层上以抽象的方式进行系统分析和软件设计过程。经济可行性分析在android系统各种手机软件频频被开发出来的今天,那些软件开放团队如何进行软件的开发,以及开发出来的软件有什么特色来吸引用户,是越来越重要的问题。而我们这个小软件内容简单,开发周期短,投资小。投入运营后,提供免费下载,然后在软件中植入广告成分,来获取利润。所以该软件为开发团队所带来的经济效益会远远高于前期投入的资金。操作可行性分析本软件的开发工具是eclipse-SDK-4.2.1版本,eclipse内装插件ADT-21.0.0版本以及androidSDK2.3.3。前端开发工具是java。这样的eclipse就是一套完整的开发工具,用于生成后缀为apk的应用程序。之后将生成的apk应用程序安装到手机就可以使用了。技术可行性分析eclipse概述eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)0我们经常将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE,这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给软件开发人员提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。ADT概述Android开发工具(ADT),作为Eclipse工具插件,让其支持Android快速入门和便捷开发,可通过Eclipse启动菜单(启动Eclipse后,选择Help->InstallNewSoftware)安装。ADTFF发工具,包括AndroidDalvikDebugMoniterServer(AndroidDDMS)和AndroidDevelopmentTools(ADT,还有HierarchyViewer和TraceView两个查看器,看名称就知道功能了。DDMSM以提供调试设备时为设备截屏,查看线程及内存信息、Logcat、广播信息、模拟呼叫、接收短消息、文件查看器等功能(该功能在安装完ADM后,点击Eclipse工具栏右上角的那个带箭头的小窗口图标弹出菜单中打开)。AndroidDevelopmentTools(ADT工具应该是为Eclipse支持Android项目快速编程开发和调试插件而已。androidSDK概述SDK(softwaredevelopmentkit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,AndroidSDK指的是Android专属的软件开发工具包。下载好AndroidSDKt,开始安装,AndroidSDKS用了Java语言,所以需要先安装JDK5.0及以上版本。直接下载jdk安装文件安装更为方便。AndroidSD心用直接安装,下载后,直接解压即可,将下载后的SDK勺压缩包解压到适当的位置,就这么简单;SD3装OKjava概述Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PG数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。第三章需求分析本设计为android系统手机上的一个画画小软件,该软件主要是在eclipse开发工具上用java语言编写的一个结果。eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。而java语言具有卓越的通用性、高效性、平台移植性和安全性。Eclipse编辑器引入了编辑环境方面的一些增强功能,诸如单词补齐,增量搜索,代码凸显,缩进文本,标记行号,彩色打印,和快捷方式。eclipse编辑器还提供了许多为特定语言设计的功能,比如在你输入原型和函数调用的时候它能够自动完成这些字符串的输入。生成的应用程序安装到手机后,直接点击打开,操作简单明了,软件具有形状的选择、画笔宽度的调整、画笔颜色的改变、绘画风格的改变、整屏清除以及保存等功能。软件功能描述小画家画画软件主要是提供给使用android系统智能手机的用户,增加业余时间的趣味性。本软件主要有简笔画画、上色、保存等功能。形状选择,打开软件,选择菜单键,就会弹出菜单里面的功能,选择形状功能就可以自由的选择需要的形状,形状有轨迹线、直线、矩形、椭圆形、圆形、点、还有橡皮擦等不同的形状。清除,打开软件,选择菜单键,就会弹出菜单里面的功能,清除功能就是将所绘制的整张画布全部消除。保存,打开软件,选择菜单键,就会弹出菜单里面的功能,如果绘画好一张满意的画,选择保存就可以将图保存在手机里面,以供自己以后欣赏或者与朋友分享。设置,打开软件,选择菜单键,就会弹出菜单里面的功能,选择设置,就可以进入到设置画面,设置里面有画刷宽度的调节、画笔颜色的选择、画画风格的选择、是否是全屏模式、目前所使用的版本、
以及可以看到最后调试的时间与快捷键和对开发者的建议。系统功能分析根据软件的使用情况和面向对象,本软件具备一下功能模块以及操作方式:功能功能类别子功能用户管理模块setDrawing设置形状clearCanvas清屏saveToSdcard保存SettingsActivity设置颜色管理模块(color)ColorPickerDialog颜色选择画刷大小管理模块(size)Brush设置画刷大小菜单用户模块功能描述用户进入软件并选择操作操作序列1,点击“形状”选择要形状,默认轨迹线。2,点击“清除”抹掉整张画布的所有线条。3,点击“保存”保存当前的所画的画。4,点击“设置”进入更多的设置画面。形状形状管理模块功能描述用户选择图形形状操作序列1,点击menu按钮,屏幕下方显示菜单。2,点击“形状”进入形状设置。3,选择需要的形状就可以了。
清除清除管理模块功能描述用户需要清除整个画布操作序列1,点击menu按钮,屏幕下方显示菜单。2,点击“清除”就把整张画布清除了。保存保存管理模块功能描述用户需要保存所画的画操作序列3,点击menu按钮,屏幕下方显示菜单。4,点击“保存”就将所画的画保存下来了。颜色颜色管理模块功能描述用户选择画刷颜色操作序列1,点击menu按钮,屏幕下方显示菜单。2,点击“设置”进入设置画面。3,点击“颜色”就可以选择自己喜欢的颜色了。画刷大小画刷大小管理模块功能描述用户选择画刷的大小操作序列1,点击menu按钮,屏幕下方显示菜单。2,点击“设置”进入设置画面。3,点击“画刷宽度”就可以设置合适的画刷宽度了。风格画画风格管理模块功能描述用户选择画画的风格操作序列1,点击menu按钮,屏幕下方显示菜单。2,点击“设置”进入设置画面。3,点击“风格”就可以设置画画的风格了。模式画图模式管理模块功能描述用户选择画图的模式操作序列1,点击menu按钮,屏幕下方显示菜单。2,点击“设置”进入设置画面。3,点击“全屏模式”就可以设置画图的模式了。软件需求分析随着社会的发展,时代的进步,人们对生活品质的不断提高,对生活的享受心理也越来越强,越来越注重休闲娱乐。只有抓住现在人们的心理需要才能在现在有得一席之地。同样在手机软件方面也是一样的,现在的大多数人的手机里面占据一大部分内存的都是休闲娱乐的游戏,就是在无聊的时候打发时间的。而我们这款android小画家画图软件就是提供给那些爱画简笔画的画图爱好者,所以,既然现在有这个需求,我们就可以满足用户的这个需要,开发这么一款画图的软件。软件概念结构设计这一设计阶段是在需求分析的基础上而进行的,设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑设计打下基础。概念结构的主要特点是:(1)能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对软件功能的要求。(2)易于理解,从而可以用它和不熟悉使用手机的用户交换意见,用户的积极参与是软件开发设计成功的关键。(3)易于更改,当应用环境和应用要求改变时,容易对概念模型修改和-9-扩充。在小画家软件开发中存在系统用例、开发人员与用户、数据流程处理、数据总体流程图数据表述E-R图软件卸载信
息表第四章软件详细设计软件设计原理本软件基于android系统智能手机,在android系统设备上运行,就像打开手机播放器一样简单打开软件就可以操作。它是随着android系统手机的兴起,借助android系统平台开发的一个软件。主要是利用不断成熟的android系统,结合java语言与XMLW产生的软件。Java语言具有卓越的通用性、高效性、平台移植性和安全性,而可扩展标记语言XML是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。这样开发的软件不仅在界面上比较美观,而且可以在android系统平台上稳定运行。软件模块设计打开软件即可进入到画画操作界面,也可以选择各种各样的功能,利用目前有的功能可以随心所欲的画出想要的简笔画,在选择各种各样的功能的时候也有界面的跳转弹出和菜单功能的选择。因为现在是测试版本,不存在与互联网连接的情况,这样对用户的私人隐私也具有绝对的安全保密,因为只是一款画图的软件,所以我们不会访问用户的手机联系人、短信、以及地理位置信息,同时也不需要获得手机的任何权限,只是能够运行和使用就可以了,这样给开发团队的建议也只能发在开发团队的邮箱中。下面是软件各种界面的截图以及部分代码。打开软件,就如同打开音乐播放器一样简单,打开之后,就进入软件的主界面,这就是一张画布,可以在上面随意画自己喜欢的线条。这是软件最基本,也是最重要的部分,在软件中首先要创建这样一个activity,才能展开其他的功能。首先要在手机界面创建一个这样的画布,这是我们最重要的起步,创建一个界面activity,才能进行下一步的操作,用public公有类,因为主要是主界面activity涉及的其他很多方法的访问,设置各种功能方法的类型、初始值。就如下所示,/***主要视图类
*/publicclassPaintPadextendsView(floattempX,tempY;privateBitmapbitmap=null;privateCanvaspaper=null;booleanisMoving=false;Drawingdrawing=null;intbgcolor;Contextcontext;然后添加不同的功能以及设置用setDrawing方法,设置绘画背景色的状态为初始默认状态、绘画形状的当前状态参数为默认空、屏幕上此时的信息为默认初始状态。/创建和屏幕大小的位图*/创建和屏幕大小的位图*/bitmap=Bitmap.createBitmap(screeninfo.getWidthPixels(),screeninfo.getHeightPixels(),Bitmap.Config.ARGB_888§;paper=newCanvas(this.bitmap);//设置背景颜色paper.drawColor(getResources().getColor(R.color.lt_bg));*设置绘画形状*@paramdrawing当前绘画形状参数*/publicvoidsetDrawing(Drawingdrawing)(this.drawing=drawing;)publicPaintPad(Contextcontext)(super(context);this.context=context;//获取屏幕上的信息context);colordefauScreeninfoscreeninfo=newScreenInfo((Activity)
this.isMoving=false;context);colordefau)手指在屏幕上触动的时候,用private私人方法巾ngerMove,会记录下所运动的轨迹或者方法所规定的形状,处理手指的动作,这是让手指在画布activity的界面处理手指所留下的坐标,将所有坐标的点组成的线就是所画出来的图形。privatevoidreDraw()(invalidate();)/***处理手指的动作。*@paramx**@paramy**/privatevoidfingerUp(floatx,floaty)(this.tempX=0;this.tempY=0;drawing.fingerUp(x,y,paper);this.isMoving=false;)/**处理手指的动作@paramx@paramy/privatevoidfingerMove(floatx,floaty)(this.tempX=x;this.tempY=y;this.isMoving=true;drawing.fingerMove(x,y,paper);)/**处理手指的动作@paramx@paramy/privatevoidfingerDown(floatx,floaty)(this.isMovingfalsethis.isMovingfalsedrawing.fingerDown(x,y,paper);)如果处理好一张图,需要保存,调用公用public方法saveBitmap,对画好的图进行保存,这个时候,软件会检测是否有保存的介质存在,如果不存在,就保存不了,有可能还会引起软件的崩溃;如果检测到存在保存介质,编辑图片名字进行保存就可以,如果没有名字,软件默认给一个名字,进行保存。/**检查SD^是否可用/publicvoidsaveBitmap()(Stringstate=Environment.getExternalStorageState();if(Environment.MEDIA_MOUNTEDquals(state))(.saveToSdcard();)elseif(Environment.MEDIA_MOUNTED_READ_ONk|Uials(state))(Toast.makeText(this.context,getResources().getString(R.string.tip_sdcard_is_read_only),Toast.LENGTH_LON)^how();)else(Toast.makeText(this.context,getResources().getString(R.string.tip_sdcard_is_not_available),Toast.LENGTH_LON)^how();))publicvoidchangeBgColor(intcolor)(this.paper.drawColor(color);this.reDraw();)当检查到储存介质是存在的,即私人的private方法saveToSdcard来执行,在SD#中创建属于软件的保存文件夹,访问路径由“/”符号来分开,保存时间为系统时间,保存的图片格式为".png"格式,最后就是将图片进行储存。/**保存位图在SD#上*/
privatevoidsaveToSdcard()(Filesdcard_path=Environment.getExternalStorageDirectory();StringmyFloder=getResources().getString(R.string.folder_name_in_sdcard);Filepaintpad=newFile(sdcard_path+"/"try(if(!paintpad.exists())(paintpad.mkdirs();))catch(Exceptione)(e.printStackTrace();)StringtimeStamp=(DateFormat.format("yyyy.MM.dd.hh.mm.ss",newjava.util.Date())).toString();StringsuffixName=".png";StringfullPath="";fullPath=sdcard_path+"/"+myFloder++suffixName;try(Toast.makeText(this.context,getResources().getString(R.string.+fullPath,Toast.LENGTH_LON)^how();press(Bitmap.CompressFormat.newFileOutputStream(fullPath));)catch(FileNotFoundExceptione)(Toast.makeText(this.context,+myFloder+"/");/"+timeStamptip_save_to)PNG100,getResources().getString(R.string.tip_sava_failed)+myFloder+"/");/"+timeStamptip_save_to)PNG100,+fullPath,Toast.LENGTH_LON)Cshow();e.printStackTrace();
利用软件就可以画出你想要的简笔画,比如像菠萝一样的水果,哆啦A梦一样的卡通人物,还有很多很多,只要你想的到的都可以利用它画出来。创建的界面如图1所示,画出白菠萝如图2所示,画出的哆啦A梦如图所示。图1,打开软件图2,用画笔画菠萝图3,用画笔画哆啦A梦只有画画远远不是我们要的要的功能,当然还有几乎所有软件都具备的一个功能,设置。菜单中含有形状、清除、保存、设置。进入设置,有很多关于画画
的各种功能。画笔的宽度pen_width为默认初始宽度,画笔的颜色pen_color为默认颜色,画布的颜色为空即是白色,画画的风格为初始默认状态,以下是进入设置的部分代码。图4是菜单现实设置的界面。图5是进入设置之后的界面,有画刷宽度、颜色等功能的选择importimportimportimportimportimportimportimportimportimportimportimportimportimportimport/***java.text.SimpleDateFormat;importimportimportimportimportimportimportimportimportimportimportimportimportimportimport/***java.util.zip.ZipEntry;java.util.zip.ZipFile;org.vhow.paintpad.R;org.vhow.paintpad.helper.ColorPickerDialog;org.vhow.paintpad.tools.Brush;android.content.DialogInterface;android.content.SharedPreferences;android.content.pm.ApplicationInfo;android.content.pm.PackageManager.NameNotFoundException;android.os.Bundle;android.preference.CheckBoxPreference;android.preference.Preference;android.preference.Preference.OnPreferenceClickListener;android.preference.PreferenceActivity;
*XML寸这个activ计y的虚拟设置*/addPreferencesFromResource(R.xml.settings);pen_width_key=
getResources().getString(R.string.pen_width_key=
getResources().getString(R.string.pen_color_key=getResources().getString(R.string./***找到要处理的对象。*/pen_width=(Preference)findPreference(getResources().getString(R.string.pen_width_keypen_color=(Preference)findPreference(getString(R.string.versionName=(Preference)findPreference(getString(R.string.lastBuildTime=(Preference)findPreference(getString(R.string.pen_width_key);pen_color_key);));pen_color_key));setting_about_version_key));setting_about_build_key));versionName.setSummary(getVersionName());lastBuildTime.setSummary(getLastBuiltTime());/***注册监听器*/包含画刷宽度,画刷颜色。pen_width.setOnPreferenceClickListener(pen_color.setOnPreferenceClickListener(}privateStringgetLastBuiltTime(){this);this);StringlastBuiltTimeStringversionName.setSummary(getVersionName());lastBuildTime.setSummary(getLastBuiltTime());/***注册监听器*/包含画刷宽度,画刷颜色。pen_width.setOnPreferenceClickListener(pen_color.setOnPreferenceClickListener(}privateStringgetLastBuiltTime(){this);this);StringlastBuiltTimeString=try{ApplicationInfoai=getPackageManager().getApplicationInfo(getPackageName(),0);"Unknown";ZipFilezf=newZipFile(ai.ZipEntryze=zf.getEntry(
longtime=ze.getTime();sourceDir);"classes.dex");lastBuiltTimeString=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(newjava.util.Date(time));}catch(Exceptione){//最后编译时间是“未知”.}returnlastBuiltTimeString;}privateStringgetVersionName(){StringversionName="Unknown";try{versionName=this.getPackageManager().getPackageInfo(getPackageName(),0).versionName;}catch(NameNotFoundExceptione){//最后的版本名是“未知”。}returnversionName;}/***处理该事件的优先权*/publicbooleanonPreferenceClick(Preferencepreference){if(preference.getKey().equals(pen_color_key)){Stringstr=getResources().getString(R.string.tip_choose_color);newColorPickerDialog(this,this,Brush.getPen().getColor(),str).show();}elseif(preference.getKey().equals(pen_width_key)){一一showSetBrushWidthDialog();}returntrue;*弹出一个对话框SeekBar以控制画笔的宽度*/privatevoidshowSetBrushWidthDialog()(newSeekBarDialog(this);getPen().getStrokeWidth()+SeekBarDialogseekBarDialog=seekBarDialog.setTitle(Brush."像素");newSeekBarDialog(this);getPen().getStrokeWidth()+seekBarDialog.setButton(getResources().getString(R.string.alert_dialog_ok),getResources().getString(R.string.alert_dialog_ok),whichButton)newDialogInterface.OnClickListener()(publicvoidonClick(DialogInterfacedialog,intwhichButton)newDialogInterface.OnClickListener()(publicvoidonClick(DialogInterfacedialog,int(dialog.dismiss();)});seekBarDialog.show();}/***当画刷颜色改变时,这个方法将被调用。*/publicvoidcolorChanged(intcolor)(Brushpen=Brush.getPen();pen.setColor(color);图5,打开菜单中的设置当在菜单中选择形状之后,就会弹出形状的界面,在形状界面有很多形状供
选择,下面可以有几个形状的源代码。当选择需要形状之后就进入到画布,画出的图形就会是选择到的形状。直线代码如下:importorg.vhow.paintpad.tools.Brush;importandroid.graphics.Canvas;/**直线。/publicclassStraightLineextendsDrawing(@Overridepublicvoiddraw(Canvascanvas)(canvas.drawLine(this.startX,this.startY,this.stopX,this.stopY,Brush.getPen());))矩形代码如下:importorg.vhow.paintpad.tools.Brush;importandroid.graphics.Canvas;/**矩形。/publicclassRectextendsDrawing(@Override
publicvoiddraw(Canvascanvas){canvas.drawRect(this.startX,this.startY,this.stopX,this.stopY,Brush.getPen());}}轨迹线代码如下:importorg.vhow.paintpad.tools.Brush;importimportandroid.graphics.Canvas;importandroid.graphics.Path;importandroid.graphics.Path;/**跟踪手指在屏幕上运动。/publicclassPathLineextendsDrawing{PathmPath=privateprivatepublic{floatstaticnull;mXmYPathmPath=privateprivatepublic{floatstaticnull;mXmYfinalfloatTOUCH_TOLERANCE4;PathLine()mPath=newPath();}@Overridepublicvoiddraw(Canvascanvas){canvas.drawPath(this}@OverridepublicvoidfingerDown({mPath.reset();mPath.moveTo(x,y);this.mX=x;this.mY=y;}@OverridepublicvoidfingerMove({.mPath,Brush.getPen());floatfloatfloatdx=Math.abs(x-
floatdy=Math.abs(y-x,floatx,floatcanvas.drawPath(this}@OverridepublicvoidfingerDown({mPath.reset();mPath.moveTo(x,y);this.mX=x;this.mY=y;}@OverridepublicvoidfingerMove({.mPath,Brush.getPen());floatfloatfloatdx=Math.abs(x-
floatdy=Math.abs(y-x,floatx,floatmX;mY;if(dx>=TOUCH_TOLERANC|Edy>={y,Canvascanvas)y,Canvascanvas)TOUCH_TOLERANCEmPath.quadTo(mXmY(x+mX)/2,(y+mY/2);mX=x;mY=y;)this.draw(canvas);)@OverridepublicvoidfingerUp(floatx,floaty,Canvascanvas){mPath.lineTo(mXmY;this.draw(canvas);mPath.reset();))图6,打开菜单中的形状功能在设置中就可以进行颜色选择,颜色的设置用public公有类卜面是颜ColorPickerDialog进行设置,定义颜色改变的方法colorChanged,卜面是颜色设置的代码,图7是进入到颜色设置的界面。importandroid.app.Dialog;importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.graphics.RectF;importandroid.graphics.Shader;importandroid.graphics.SweepGradient;importandroidosBundle;importandroid.view.MotionEvent;importandroid.view.View;publicclassColorPickerDialogextendsDialog{Stringtitle;publicinterfaceOnColorChangedListener(voidcolorChanged(intcolor);}privateOnColorChangedListenermListener;privateintmInitialColor;privatestaticclassColorPickerViewextendsView(privatePaintmPaint;privatePaintmCenterPaint;privatefinalint口mColors;privateOnColorChangedListenermListener;ColorPickerView(Contextc,OnColorChangedListenerl,intcolor)(super(c);mListener=l;mColors=newint口{0xFFFF0000,0xFFFF00FF,0xFF0000FF,0xFF00FFFF,0xFF00FF00,0xFFFFFF00,0xFFFF0000};Shaders=newSweepGradient(0,0,mColors,null);mPaint=newPaint(Paint.ANTI_ALIAS_FLAG);mPaint.setShader(s);mPaint.setStyle(Paint.Style.STROK耳mPaint.setStrokeWidth(32);mCenterPaint=newPaint(Paint.ANTI_ALIAS_FLAG);mCenterPaint.setColor(color);mCenterPaint.setStrokeWidth(5);}privatebooleanmTrackingCenter;privatebooleanmHighlightCenter;@OverrideprotectedvoidonDraw(Canvascanvas){floatr=CENTER_XmPaint.getStrokeWidth()*0.5f;canvas.translate(CENTER_XCENTER』canvas.drawOval(newRectF(-r,-r,r,r),mPaint);canvas.drawCircle(0,0,CENTER_RADIU,SmCenterPaint);if(mTrackingCenter){intc=mCenterPaint.getC010r();mCenterPaint.setStyle(Paint.Style.STROKEif(mHighlightCenter){mCenterPaint.setAlpha(0xFF);)else{mCenterPaint.setAlpha(0x80);)canvas.drawCircle(0,0,CENTER_RADIUS+mCenterPaint.getStrokeWidth(),mCenterPaint);mCenterPaint.setStyle(Paint.Style.FILL);mCenterPaint.setColor(c);)@OverrideprotectedheightMeasureSpec){setMeasuredDimension()privatestaticfinalintprivatestaticfinalintprivatestaticfinalintvoidonMeasure(intwidthMeasureSpec,intprivateintave(ints,int{returns+java.lang.Math.)privateintinterpColor(int{if(unit<=0){returncolors[0];)if(unit>=1){returncolors[colors.)floatp=unit*(i=(int)p;p-=i;//nowpisjusttheindexintc0=colors,;intcl=colors[i+1];inta=ave(Color.CENTER_X2,CENTER_Y*2);CENTER_=100;CENTER_¥=100;CENTER_RADIUS32;d,floatp)round(p*(d-s));colors口,floatunit)length-1];length-1);fractionalpart[0...1)andialpha(c0),Color.alpha(c1),p);istheintr=ave(Color.red(c0),Color.red(c1),p);intg=ave(Color.green(c0),Color.green(c1),p);intb=ave(Color.blue(c0),Color.blue(c1),p);returnColor.argb(a,r,g,b);}privatestaticfinalfloatPI=3.1415926f;@OverridepublicbooleanonTouchEvent(MotionEventevent){floatx=event.getX()-CENTER_Xfloaty=event.getY()-CENTER_YbooleaninCenter=java.lang.Math.sqrt(x*x+y*y)<=CENTER_RADIUSswitch(event.getAction()){caseMotionEvent.ACTION_DOWNmTrackingCenter=inCenter;if(inCenter){mHighlightCenter=true;invalidate();break;}caseMotionEvent.ACTION_MOVEif(mTrackingCenter){if(mHighlightCenter!=inCenter){mHighlightCenter=inCenter;invalidate();}}else{floatangle=(float)java.lang.Math.atan2(y,x);//needtoturnangle[-PI...PI]intounit[0....1]floatunit=angle/(2*PI);if(unit<0){unit+=1;}mCenterPaint.setC010r(interpColor(mColors,unit));invalidate();)break;caseMotionEvent.ACTION_UPif(mTrackingCenter){if(inCenter){mListener.colorChanged(mCenterPaint.getC010r());)mTrackingCenter=false;//sowedraww/ohaloinvalidate();)break;)returntrue;))publicColorPickerDialog(Contextcontext,OnColorChangedListenerlistener,intinitialColor,Stringstr){super(context);mListener=listener;mInitialColor=initialColor;title=str;)@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);OnColorChangedListenerl=newOnColorChangedListener。{publicvoidcolorChanged(intcolor){mListener.colorChanged(color);dismiss();));setContentView(newColorPickerView(getContext(),l,mInitialColor));setTitle(title);
图7,打开设置中的颜色选项第五章软件测试软件测试是把各个功能模块装配成一个完整的软件来测试。在这个过程中不仅应该发现设计和编码的错误,还应该验证软件确实能提供需求说明书中指定的功能,而且软件的动态特性也符合预定的要求。根据软件测试的要求,将各个模块部分:形状、清除、保存、设置、以及设置中的功能综合成软件一一小画家触屏画软件测试,测试的结果:本软件根据设计要求,达到了预期的开发设想,完成了开发任务。本软件界面设计上紧紧跟随软件设计潮流。系统的编码上,系统代码的编写风格也基本趋于模块化,提高了系统的可读性和可扩展性。本软件能够实现预期的改变形状、清除、保存、改变画笔宽度、改变画笔颜色等,符合软件设计任务书的要求。功能:形状。测试操作:打开软件的菜单选择形状功能,任意选择一种形状在画布上绘画,可以画出选择的形状,功能实现。功能:清除。测试操作:在画板上随意绘画,然后打开软件的菜单选择清除功能,画布立即变成没有任何痕迹,功能实现。功能:保存。测试操作:随意绘制一幅简笔画,打开软件的菜单选择保存功能,在安装小画家的文件夹下找到所绘制的图片,功能实现。功能:设置。测试操作:打开软件的菜单选择设计。1.能够进入到设置画面,功能实现。2.在设置中,选择画刷宽度,设置一个画刷宽度,进入到画布界面,是预设的画刷宽度,功能实现。3.在设置中,选择颜色,设置一种颜色,是预设的画笔颜色,功能实现。4在设置中,将风格的单选框选择,进入到画布界面,是预设的风格,功能实现。5.在设置中,将屏幕的单选框选择,进入到画布界面,预设的模式,功能实现。根据以上测试,可以证明,软件已经达到了我们预想的效果。那么可以说,我们的软件就目前来看,是成功的总结在当今手机普及的时代,手机已经渗入到我们的学习、工作、生活和休闲时问中,只要在以上任何一项中占据地位,那么就可以说,我们在这个一方面占领了一席之地。我们就抓住现在人类的注重娱乐心理,开发小画家画图软件,占据喜爱画简笔画的人的空余时间。通过毕业设计熟悉了软件开发的整个流程,巩固所学到的知识,并把所学的理论知识综合运用于实践中,特别是对软件开发原理和软件工程等理论知识要求较高。同时通过毕业设计掌握java语言,掌握软件开发基本原理和基本技术,熟悉软件设计及
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民营医院规制度
- 装备科工作总结
- 建设施工机械设备合同书(3篇)
- 期末总结范文1200字(32篇)
- 投标保密的承诺书(30篇)
- 大一学生干部个人总结
- 江苏省泰州市(2024年-2025年小学五年级语文)人教版期末考试((上下)学期)试卷及答案
- 公共卫生主题培训
- 世界历史九年级上册教案全册
- DB11T 1133-2014 人工砂应用技术规程
- 老人康复治疗知识讲座
- 机械制图直线的投影公开课课件1
- 物流仓储招商策划制定
- 商业秘密保护意识培训
- 专题03 中点弦问题(点差法)(教师版)2024高考数学复习满分突破
- 少儿体智能特色课程设计
- 成人重症患者镇痛管理(专家共识)
- AFP、DCP和GGT联合检测在原发性肝癌诊断中的应用价值演示稿件
- 植物生理学试题及答案7
- 《消毒隔离制度》课件
- 中职语文课件:1.1《送瘟神》课件14张2023-2024学年中职语文职业模块
评论
0/150
提交评论