軟件開(kāi)發(fā)畢業(yè)設(shè)計(jì)范文_第1頁(yè)
軟件開(kāi)發(fā)畢業(yè)設(shè)計(jì)范文_第2頁(yè)
軟件開(kāi)發(fā)畢業(yè)設(shè)計(jì)范文_第3頁(yè)
軟件開(kāi)發(fā)畢業(yè)設(shè)計(jì)范文_第4頁(yè)
軟件開(kāi)發(fā)畢業(yè)設(shè)計(jì)范文_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

精選優(yōu)質(zhì)文檔-----傾情為你奉上精選優(yōu)質(zhì)文檔-----傾情為你奉上專心---專注---專業(yè)專心---專注---專業(yè)精選優(yōu)質(zhì)文檔-----傾情為你奉上專心---專注---專業(yè)畢業(yè)設(shè)計(jì)設(shè)計(jì)題目:系別:專業(yè)班級(jí):指導(dǎo)老師:學(xué)生姓名:2013年5月18日摘要:在21世紀(jì)的今天,手機(jī)幾乎是每個(gè)人的必備品,特別是在高校的學(xué)生,不管是吃飯、睡覺(jué)、還是上課,手機(jī)總是不離手。而且手機(jī)更新?lián)Q代更是日新月異,然后在現(xiàn)在的手機(jī)市場(chǎng)中android系統(tǒng)的智能機(jī)成為主流。我們這款畫畫小軟件正是在android系統(tǒng)的平臺(tái)上進(jìn)行運(yùn)行。在日常生活中,我們畫畫只能在紙上的時(shí)代已經(jīng)過(guò)去,這款android小畫家畫畫軟件,可以進(jìn)行簡(jiǎn)單的簡(jiǎn)筆畫操作、上色。既節(jié)約了增加了我們平時(shí)的樂(lè)趣,也節(jié)約了資源。該軟件具有改變畫圖的形狀、改變畫筆的顏色、改變畫刷的寬度、改變畫畫的風(fēng)格、以及保存、清除等功能。經(jīng)過(guò)測(cè)試,這是一款能為我們生活增加樂(lè)趣的軟件。關(guān)鍵字:手機(jī);android;畫畫軟件TOC\o"1-3"\h\u目錄第一章引言1.1發(fā)展情況在現(xiàn)在這個(gè)手機(jī)普及的時(shí)代,各種手機(jī)軟件也是層出不窮,尤其是在這兩年的飛速發(fā)展,android軟件可以是說(shuō)席卷各大手機(jī)軟件網(wǎng)站,為android軟件開(kāi)發(fā)者既帶來(lái)了收入的回報(bào),也提出了技術(shù)的挑戰(zhàn)。android系統(tǒng)這個(gè)平臺(tái)以成為智能手機(jī)系統(tǒng)的核心,也是IT技術(shù)行業(yè)、智能手機(jī)制造行業(yè)高度重視的。隨著android系統(tǒng)的不斷更新,現(xiàn)在功能各方面已經(jīng)非常強(qiáng)大,這不僅是一臺(tái)手機(jī)這么簡(jiǎn)單,而是一個(gè)移動(dòng)終端。各種軟件都有幾乎都有android系統(tǒng)的版本。同時(shí)用戶現(xiàn)在不僅要求手機(jī)有傳統(tǒng)手機(jī)的功能,現(xiàn)在必須更加具有娛樂(lè)性以及休閑性。抓住現(xiàn)在用戶的這個(gè)心理狀態(tài),于是android平臺(tái)上運(yùn)行的小畫家畫畫軟件就運(yùn)營(yíng)而生了。1.2研究現(xiàn)狀就目前的android系統(tǒng)智能手機(jī)在市場(chǎng)的占有率來(lái)看,對(duì)android系統(tǒng)手機(jī)軟件的開(kāi)發(fā)具有非常廣闊的前景。雖然在IT行業(yè)中都處于一個(gè)飽和的狀態(tài),但是在android系統(tǒng)手機(jī)軟件開(kāi)發(fā)這一方面又處于緊缺的狀態(tài),因?yàn)楝F(xiàn)在的手機(jī)用戶拿起手機(jī)不僅僅是只用來(lái)打打電話,發(fā)發(fā)短信這么簡(jiǎn)單,用戶更加追求的是手機(jī)的娛樂(lè)性和休閑性。說(shuō)的更加簡(jiǎn)單明了一點(diǎn)就是,用戶在無(wú)聊的時(shí)候可以用手機(jī)來(lái)消遣時(shí)間。android系統(tǒng)自2009年2月發(fā)布的android1.1開(kāi)始已經(jīng)有4年的發(fā)展歷史。然而在這短短四年時(shí)間就可以成為智能手機(jī)市場(chǎng)的領(lǐng)頭羊,那么對(duì)于我們開(kāi)發(fā)android系統(tǒng)手機(jī)的軟件,也是同樣具有廣闊的市場(chǎng)。1.3研究前景展望隨著android系統(tǒng)智能手機(jī)的誕生,android系統(tǒng)打破了前些年智能手機(jī)的壟斷的傳統(tǒng)市場(chǎng)。同時(shí)android系統(tǒng)的手機(jī)軟件占據(jù)的手機(jī)軟件市場(chǎng)的比例越來(lái)越大,那么我們開(kāi)發(fā)的畫畫涂鴉軟件是基于android系統(tǒng)的,可以說(shuō)是具有廣闊的發(fā)展前景。而且現(xiàn)在用戶對(duì)手機(jī)軟件是否具有娛樂(lè)性有非常強(qiáng)的選擇性,用戶對(duì)于空閑時(shí)間的消遣,還有即時(shí)聊天需要發(fā)送一個(gè)手繪涂鴉圖片的需要,那么對(duì)我們這款軟件的選擇是非常有用的。對(duì)于小畫家手機(jī)軟件具有一下優(yōu)點(diǎn):(1)喜愛(ài)畫畫的用于,無(wú)論是在車上,還是站臺(tái)等車,都可以隨時(shí)隨地的進(jìn)行簡(jiǎn)筆畫畫畫的操作。(2)可以將畫好的圖片保存通過(guò)即時(shí)聊天工具發(fā)給好朋友分享自己的作品。(3)在手機(jī)上畫可以節(jié)約資源,在環(huán)保的角度,起到節(jié)能減排的效果。1.4選題的目的及意義為了鞏固在大學(xué)三年所學(xué)的知識(shí),達(dá)到學(xué)以并用的目的,作為四川工商職業(yè)技術(shù)學(xué)院信息工程系軟件班大三的畢業(yè)生,希望在離開(kāi)自己母校的時(shí)候能夠把自己所學(xué)的知識(shí)能夠做一次全面的鞏固和提高,我的選題意義如下:隨著android系統(tǒng)的不斷升級(jí),android系統(tǒng)智能手機(jī)的各種軟件對(duì)各方面的影響越來(lái)越大,并且android系統(tǒng)成為以后移動(dòng)智能客戶終端的可能性同時(shí)也越來(lái)越大,那么未來(lái)android系統(tǒng)主導(dǎo)智能手機(jī)市場(chǎng)也是必然的發(fā)展趨勢(shì)。那么我們開(kāi)發(fā)的這款畫畫小軟件也是順應(yīng)時(shí)代發(fā)展的潮流,在傳統(tǒng)的按鍵手機(jī),我們不能做出這個(gè)靈活的畫畫涂鴉軟件,現(xiàn)在我們借助android系統(tǒng)這個(gè)平臺(tái)來(lái)實(shí)現(xiàn)了這一功能。這樣不僅提高圖片的趣味性;建立生動(dòng)有趣的圖片處理平臺(tái),而且還提高手機(jī)的利用率。何樂(lè)而不為呢。

第二章系統(tǒng)可行性分析可行性研究的目的就是用最小的代價(jià)在盡可能短的時(shí)間內(nèi)確定問(wèn)題是否能夠解決。可行性研究的目的不是解決問(wèn)題,而是確定問(wèn)題是否值得去解決??尚行匝芯烤褪沁M(jìn)行一次大大壓縮簡(jiǎn)化了的系統(tǒng)分析和軟件設(shè)計(jì)過(guò)程,也就是在較高層上以抽象的方式進(jìn)行系統(tǒng)分析和軟件設(shè)計(jì)過(guò)程。2.1經(jīng)濟(jì)可行性分析在android系統(tǒng)各種手機(jī)軟件頻頻被開(kāi)發(fā)出來(lái)的今天,那些軟件開(kāi)放團(tuán)隊(duì)如何進(jìn)行軟件的開(kāi)發(fā),以及開(kāi)發(fā)出來(lái)的軟件有什么特色來(lái)吸引用戶,是越來(lái)越重要的問(wèn)題。而我們這個(gè)小軟件內(nèi)容簡(jiǎn)單,開(kāi)發(fā)周期短,投資小。投入運(yùn)營(yíng)后,提供免費(fèi)下載,然后在軟件中植入廣告成分,來(lái)獲取利潤(rùn)。所以該軟件為開(kāi)發(fā)團(tuán)隊(duì)所帶來(lái)的經(jīng)濟(jì)效益會(huì)遠(yuǎn)遠(yuǎn)高于前期投入的資金。2.2操作可行性分析本軟件的開(kāi)發(fā)工具是eclipse-SDK-4.2.1版本,eclipse內(nèi)裝插件ADT-21.0.0版本以及androidSDK2.3.3。前端開(kāi)發(fā)工具是java。這樣的eclipse就是一套完整的開(kāi)發(fā)工具,用于生成后綴為apk的應(yīng)用程序。之后將生成的apk應(yīng)用程序安裝到手機(jī)就可以使用了。2.3技術(shù)可行性分析2.3.1eclipse概述eclipse是一個(gè)開(kāi)放的、基于的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)組件構(gòu)建開(kāi)發(fā)環(huán)境。幸運(yùn)的是,Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開(kāi)發(fā)工具(JavaDevelopmentKit,)。我們經(jīng)常將Eclipse當(dāng)作Java集成開(kāi)發(fā)環(huán)境()來(lái)使用,但Eclipse的目標(biāo)卻不僅限于此。Eclipse還包括插件開(kāi)發(fā)環(huán)境(Plug-inDevelopmentEnvironment,PDE),這個(gè)組件主要針對(duì)希望擴(kuò)展Eclipse的軟件開(kāi)發(fā)人員,因?yàn)樗试S他們構(gòu)建與Eclipse環(huán)境無(wú)縫集成的工具。由于Eclipse中的每樣?xùn)|西都是插件,對(duì)于給Eclipse提供插件,以及給軟件開(kāi)發(fā)人員提供一致和統(tǒng)一的集成開(kāi)發(fā)環(huán)境而言,所有工具開(kāi)發(fā)人員都具有同等的發(fā)揮場(chǎng)所。2.3.2ADT概述

Android開(kāi)發(fā)工具(ADT),作為Eclipse工具插件,讓其支持Android快速入門和便捷開(kāi)發(fā),可通過(guò)Eclipse啟動(dòng)菜單(啟動(dòng)Eclipse后,選擇Help->InstallNewSoftware)安裝。ADT開(kāi)發(fā)工具,包括AndroidDalvikDebugMoniterServer(AndroidDDMS)和AndroidDevelopmentTools(ADT),還有HierarchyViewer和TraceView兩個(gè)查看器,看名稱就知道功能了。DDMS可以提供調(diào)試設(shè)備時(shí)為設(shè)備截屏,查看線程及內(nèi)存信息、Logcat、廣播信息、模擬呼叫、接收短消息、文件查看器等功能(該功能在安裝完ADT之后,點(diǎn)擊Eclipse工具欄右上角的那個(gè)帶箭頭的小窗口圖標(biāo)彈出菜單中打開(kāi))。AndroidDevelopmentTools(ADT)工具應(yīng)該是為Eclipse支持Android項(xiàng)目快速編程開(kāi)發(fā)和調(diào)試插件而已。2.3.3androidSDK概述SDK:(softwaredevelopmentkit)開(kāi)發(fā)工具包。被用于為特定的、軟件框架、硬件平臺(tái)、操作系統(tǒng)等建立的開(kāi)發(fā)工具的集合。因此,AndroidSDK指的是專屬的。下載好AndroidSDK后,開(kāi)始安裝,AndroidSDK采用了,所以需要先安裝JDK5.0及以上版本。直接下載jdk安裝文件安裝更為方便。AndroidSDK不用直接安裝,下載后,直接解壓即可,將下載后的SDK的解壓到適當(dāng)?shù)奈恢茫瓦@么簡(jiǎn)單;SDK安裝OK。2.3.4java概述Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,是由SunMicrosystems公司于1995年5月推出的Java程序設(shè)計(jì)語(yǔ)言和(即JavaSE,JavaEE,JavaME)的總稱。Java技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開(kāi)發(fā)者專業(yè)社群。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。

第三章需求分析本設(shè)計(jì)為android系統(tǒng)手機(jī)上的一個(gè)畫畫小軟件,該軟件主要是在eclipse開(kāi)發(fā)工具上用java語(yǔ)言編寫的一個(gè)結(jié)果。eclipse是一個(gè)開(kāi)放的、基于的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)組件構(gòu)建開(kāi)發(fā)環(huán)境。而java語(yǔ)言具有卓越的通用性、高效性、平臺(tái)移植性和安全性。Eclipse編輯器引入了編輯環(huán)境方面的一些增強(qiáng)功能,諸如單詞補(bǔ)齊,增量搜索,代碼凸顯,縮進(jìn)文本,標(biāo)記行號(hào),彩色打印,和快捷方式。eclipse編輯器還提供了許多為特定語(yǔ)言設(shè)計(jì)的功能,比如在你輸入原型和函數(shù)調(diào)用的時(shí)候它能夠自動(dòng)完成這些字符串的輸入。生成的應(yīng)用程序安裝到手機(jī)后,直接點(diǎn)擊打開(kāi),操作簡(jiǎn)單明了,軟件具有形狀的選擇、畫筆寬度的調(diào)整、畫筆顏色的改變、繪畫風(fēng)格的改變、整屏清除以及保存等功能。3.1軟件功能描述小畫家畫畫軟件主要是提供給使用android系統(tǒng)智能手機(jī)的用戶,增加業(yè)余時(shí)間的趣味性。本軟件主要有簡(jiǎn)筆畫畫、上色、保存等功能。形狀選擇,打開(kāi)軟件,選擇菜單鍵,就會(huì)彈出菜單里面的功能,選擇形狀功能就可以自由的選擇需要的形狀,形狀有軌跡線、直線、矩形、橢圓形、圓形、點(diǎn)、還有橡皮擦等不同的形狀。清除,打開(kāi)軟件,選擇菜單鍵,就會(huì)彈出菜單里面的功能,清除功能就是將所繪制的整張畫布全部清除。保存,打開(kāi)軟件,選擇菜單鍵,就會(huì)彈出菜單里面的功能,如果繪畫好一張滿意的畫,選擇保存就可以將圖保存在手機(jī)里面,以供自己以后欣賞或者與朋友分享。設(shè)置,打開(kāi)軟件,選擇菜單鍵,就會(huì)彈出菜單里面的功能,選擇設(shè)置,就可以進(jìn)入到設(shè)置畫面,設(shè)置里面有畫刷寬度的調(diào)節(jié)、畫筆顏色的選擇、畫畫風(fēng)格的選擇、是否是全屏模式、目前所使用的版本、以及可以看到最后調(diào)試的時(shí)間與快捷鍵和對(duì)開(kāi)發(fā)者的建議。3.2系統(tǒng)功能分析根據(jù)軟件的使用情況和面向?qū)ο?,本軟件具備一下功能模塊以及操作方式:功能功能類別子功能用戶管理模塊setDrawing設(shè)置形狀clearCanvas清屏saveToSdcard保存SettingsActivity設(shè)置顏色管理模塊(color)ColorPickerDialog顏色選擇畫刷大小管理模塊(size)Brush設(shè)置畫刷大小菜單用戶模塊功能描述用戶進(jìn)入軟件并選擇操作操作序列1,點(diǎn)擊“形狀”選擇要形狀,默認(rèn)軌跡線。2,點(diǎn)擊“清除”抹掉整張畫布的所有線條。3,點(diǎn)擊“保存”保存當(dāng)前的所畫的畫。4,點(diǎn)擊“設(shè)置”進(jìn)入更多的設(shè)置畫面。形狀形狀管理模塊功能描述用戶選擇圖形形狀操作序列點(diǎn)擊menu按鈕,屏幕下方顯示菜單。點(diǎn)擊“形狀”進(jìn)入形狀設(shè)置。選擇需要的形狀就可以了。清除清除管理模塊功能描述用戶需要清除整個(gè)畫布操作序列點(diǎn)擊menu按鈕,屏幕下方顯示菜單。點(diǎn)擊“清除”就把整張畫布清除了。保存保存管理模塊功能描述用戶需要保存所畫的畫操作序列點(diǎn)擊menu按鈕,屏幕下方顯示菜單。點(diǎn)擊“保存”就將所畫的畫保存下來(lái)了。顏色顏色管理模塊功能描述用戶選擇畫刷顏色操作序列點(diǎn)擊menu按鈕,屏幕下方顯示菜單。點(diǎn)擊“設(shè)置”進(jìn)入設(shè)置畫面。點(diǎn)擊“顏色”就可以選擇自己喜歡的顏色了。畫刷大小畫刷大小管理模塊功能描述用戶選擇畫刷的大小操作序列點(diǎn)擊menu按鈕,屏幕下方顯示菜單。點(diǎn)擊“設(shè)置”進(jìn)入設(shè)置畫面。點(diǎn)擊“畫刷寬度”就可以設(shè)置合適的畫刷寬度了。風(fēng)格畫畫風(fēng)格管理模塊功能描述用戶選擇畫畫的風(fēng)格操作序列點(diǎn)擊menu按鈕,屏幕下方顯示菜單。點(diǎn)擊“設(shè)置”進(jìn)入設(shè)置畫面。點(diǎn)擊“風(fēng)格”就可以設(shè)置畫畫的風(fēng)格了。模式畫圖模式管理模塊功能描述用戶選擇畫圖的模式操作序列點(diǎn)擊menu按鈕,屏幕下方顯示菜單。點(diǎn)擊“設(shè)置”進(jìn)入設(shè)置畫面。點(diǎn)擊“全屏模式”就可以設(shè)置畫圖的模式了。3.3軟件需求分析隨著社會(huì)的發(fā)展,時(shí)代的進(jìn)步,人們對(duì)生活品質(zhì)的不斷提高,對(duì)生活的享受心理也越來(lái)越強(qiáng),越來(lái)越注重休閑娛樂(lè)。只有抓住現(xiàn)在人們的心理需要才能在現(xiàn)在有得一席之地。同樣在手機(jī)軟件方面也是一樣的,現(xiàn)在的大多數(shù)人的手機(jī)里面占據(jù)一大部分內(nèi)存的都是休閑娛樂(lè)的游戲,就是在無(wú)聊的時(shí)候打發(fā)時(shí)間的。而我們這款android小畫家畫圖軟件就是提供給那些愛(ài)畫簡(jiǎn)筆畫的畫圖愛(ài)好者,所以,既然現(xiàn)在有這個(gè)需求,我們就可以滿足用戶的這個(gè)需要,開(kāi)發(fā)這么一款畫圖的軟件。3.4軟件概念結(jié)構(gòu)設(shè)計(jì)這一設(shè)計(jì)階段是在需求分析的基礎(chǔ)上而進(jìn)行的,設(shè)計(jì)出能夠滿足用戶需求的各種實(shí)體,以及它們之間的關(guān)系,為后面的邏輯設(shè)計(jì)打下基礎(chǔ)。概念結(jié)構(gòu)的主要特點(diǎn)是:能真實(shí)、充分地反映現(xiàn)實(shí)世界,包括事物和事物之間的聯(lián)系,能滿足用戶對(duì)軟件功能的要求。易于理解,從而可以用它和不熟悉使用手機(jī)的用戶交換意見(jiàn),用戶的積極參與是軟件開(kāi)發(fā)設(shè)計(jì)成功的關(guān)鍵。易于更改,當(dāng)應(yīng)用環(huán)境和應(yīng)用要求改變時(shí),容易對(duì)概念模型修改和擴(kuò)充。軟件開(kāi)發(fā)在小畫家軟件開(kāi)發(fā)中存在系統(tǒng)用例、開(kāi)發(fā)人員與用戶、數(shù)據(jù)流程處理、數(shù)據(jù)表述等幾個(gè)對(duì)象的關(guān)系,具體描述如下面各圖所示。軟件開(kāi)發(fā)用戶管理用戶管理開(kāi)發(fā)維護(hù)開(kāi)發(fā)維護(hù)后臺(tái)數(shù)據(jù)維護(hù)后臺(tái)數(shù)據(jù)維護(hù)軟件更新 開(kāi)發(fā)人員軟件更新系統(tǒng)用例圖用戶小畫家軟件開(kāi)發(fā)人員 用戶信息 軟件下載用戶小畫家軟件開(kāi)發(fā)人員 軟件信息 用戶情況 軟件升級(jí) 建議反饋總體流程圖軟件管理軟件管理用戶 軟件信息用戶軟件信息 軟件下載條件 軟件情況開(kāi)發(fā)人員 下載信息 軟件信息 軟件信息 下載條件開(kāi)發(fā)人員軟件信息表用戶下載信息表軟件信息表用戶下載信息表 用戶下載情況 用戶信息 下載量信息 軟件信息 下載信息 下載量信息下載管理用戶管理 下載量信息下載管理用戶管理 用戶信息開(kāi)發(fā)人員 用戶信息 用戶信息 下載量信息開(kāi)發(fā)人員用戶管理表用戶管理表數(shù)據(jù)流圖處理圖下載情況軟件卸載信息表軟件信息表用戶信息表下載情況軟件卸載信息表軟件信息表用戶信息表開(kāi)發(fā)團(tuán)信息表下載信息表開(kāi)發(fā)團(tuán)信息表下載信息表用戶排行表數(shù)據(jù)表述E-R圖第四章軟件詳細(xì)設(shè)計(jì)4.1軟件設(shè)計(jì)原理本軟件基于android系統(tǒng)智能手機(jī),在android系統(tǒng)設(shè)備上運(yùn)行,就像打開(kāi)手機(jī)播放器一樣簡(jiǎn)單打開(kāi)軟件就可以操作。它是隨著android系統(tǒng)手機(jī)的興起,借助android系統(tǒng)平臺(tái)開(kāi)發(fā)的一個(gè)軟件。主要是利用不斷成熟的android系統(tǒng),結(jié)合java語(yǔ)言與XML而產(chǎn)生的軟件。Java語(yǔ)言具有卓越的通用性、高效性、平臺(tái)移植性和安全性,而可擴(kuò)展標(biāo)記語(yǔ)言XML是用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語(yǔ)言,可以用來(lái)標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對(duì)自己的標(biāo)記語(yǔ)言進(jìn)行定義的源語(yǔ)言。這樣開(kāi)發(fā)的軟件不僅在界面上比較美觀,而且可以在android系統(tǒng)平臺(tái)上穩(wěn)定運(yùn)行。4.2軟件模塊設(shè)計(jì)打開(kāi)軟件即可進(jìn)入到畫畫操作界面,也可以選擇各種各樣的功能,利用目前有的功能可以隨心所欲的畫出想要的簡(jiǎn)筆畫,在選擇各種各樣的功能的時(shí)候也有界面的跳轉(zhuǎn)彈出和菜單功能的選擇。因?yàn)楝F(xiàn)在是測(cè)試版本,不存在與互聯(lián)網(wǎng)連接的情況,這樣對(duì)用戶的私人隱私也具有絕對(duì)的安全保密,因?yàn)橹皇且豢町媹D的軟件,所以我們不會(huì)訪問(wèn)用戶的手機(jī)聯(lián)系人、短信、以及地理位置信息,同時(shí)也不需要獲得手機(jī)的任何權(quán)限,只是能夠運(yùn)行和使用就可以了,這樣給開(kāi)發(fā)團(tuán)隊(duì)的建議也只能發(fā)在開(kāi)發(fā)團(tuán)隊(duì)的郵箱中。下面是軟件各種界面的截圖以及部分代碼。打開(kāi)軟件,就如同打開(kāi)音樂(lè)播放器一樣簡(jiǎn)單,打開(kāi)之后,就進(jìn)入軟件的主界面,這就是一張畫布,可以在上面隨意畫自己喜歡的線條。這是軟件最基本,也是最重要的部分,在軟件中首先要?jiǎng)?chuàng)建這樣一個(gè)activity,才能展開(kāi)其他的功能。首先要在手機(jī)界面創(chuàng)建一個(gè)這樣的畫布,這是我們最重要的起步,創(chuàng)建一個(gè)界面activity,才能進(jìn)行下一步的操作,用public公有類,因?yàn)橹饕侵鹘缑鎍ctivity涉及的其他很多方法的訪問(wèn),設(shè)置各種功能方法的類型、初始值。就如下所示,/***主要視圖類*/publicclassPaintPadextendsView{ floattempX,tempY; privateBitmapbitmap=null; privateCanvaspaper=null; booleanisMoving=false; Drawingdrawing=null; intbgcolor; Contextcontext;} 然后添加不同的功能以及設(shè)置用setDrawing方法,設(shè)置繪畫背景色的狀態(tài)為初始默認(rèn)狀態(tài)、繪畫形狀的當(dāng)前狀態(tài)參數(shù)為默認(rèn)空、屏幕上此時(shí)的信息為默認(rèn)初始狀態(tài)。/** *設(shè)置繪畫形狀 *@paramdrawing *當(dāng)前繪畫形狀參數(shù) */ publicvoidsetDrawing(Drawingdrawing) { this.drawing=drawing; } publicPaintPad(Contextcontext) { super(context); this.context=context;//獲取屏幕上的信息 ScreenInfoscreenInfo=newScreenInfo((Activity)context); /***創(chuàng)建和屏幕大小的位圖 */ bitmap=Bitmap.createBitmap(screenInfo.getWidthPixels(), screenInfo.getHeightPixels(),Bitmap.Config.ARGB_8888); paper=newCanvas(this.bitmap); //設(shè)置背景顏色 paper.drawColor(getResources().getColor(R.color.color_default_bg)); this.isMoving=false; } 手指在屏幕上觸動(dòng)的時(shí)候,用private私人方法fingerMove,會(huì)記錄下所運(yùn)動(dòng)的軌跡或者方法所規(guī)定的形狀,處理手指的動(dòng)作,這是讓手指在畫布activity的界面處理手指所留下的坐標(biāo),將所有坐標(biāo)的點(diǎn)組成的線就是所畫出來(lái)的圖形。privatevoidreDraw() { invalidate(); } /** *處理手指的動(dòng)作。 *@paramx *X坐標(biāo) *@paramy *Y坐標(biāo) */ privatevoidfingerUp(floatx,floaty) { this.tempX=0; this.tempY=0; drawing.fingerUp(x,y,paper); this.isMoving=false; } /** *處理手指的動(dòng)作 *@paramx *@paramy */ privatevoidfingerMove(floatx,floaty) { this.tempX=x; this.tempY=y; this.isMoving=true; drawing.fingerMove(x,y,paper); } /** *處理手指的動(dòng)作 *@paramx *@paramy */ privatevoidfingerDown(floatx,floaty) { this.isMoving=false; drawing.fingerDown(x,y,paper); } 如果處理好一張圖,需要保存,調(diào)用公用public方法saveBitmap,對(duì)畫好的圖進(jìn)行保存,這個(gè)時(shí)候,軟件會(huì)檢測(cè)是否有保存的介質(zhì)存在,如果不存在,就保存不了,有可能還會(huì)引起軟件的崩潰;如果檢測(cè)到存在保存介質(zhì),編輯圖片名字進(jìn)行保存就可以,如果沒(méi)有名字,軟件默認(rèn)給一個(gè)名字,進(jìn)行保存。/** * 檢查SD卡是否可用 */ publicvoidsaveBitmap() { Stringstate=Environment.getExternalStorageState(); if(Environment.MEDIA_MOUNTED.equals(state)) { saveToSdcard(); } elseif(Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { Toast.makeText(this.context, getResources().getString(R.string.tip_sdcard_is_read_only), Toast.LENGTH_LONG).show(); } else { Toast.makeText( this.context, getResources().getString( R.string.tip_sdcard_is_not_available), Toast.LENGTH_LONG).show(); } } publicvoidchangeBgColor(intcolor) { this.paper.drawColor(color); this.reDraw(); } 當(dāng)檢查到儲(chǔ)存介質(zhì)是存在的,即私人的private方法saveToSdcard來(lái)執(zhí)行,在SD卡中創(chuàng)建屬于軟件的保存文件夾,訪問(wèn)路徑由“/”符號(hào)來(lái)分開(kāi),保存時(shí)間為系統(tǒng)時(shí)間,保存的圖片格式為".png"格式,最后就是將圖片進(jìn)行儲(chǔ)存。 /** *保存位圖在SD卡上 */ privatevoidsaveToSdcard() { Filesdcard_path=Environment.getExternalStorageDirectory(); StringmyFloder=getResources().getString( R.string.folder_name_in_sdcard); Filepaintpad=newFile(sdcard_path+"/"+myFloder+"/"); 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+"/"+timeStamp+suffixName; try { Toast.makeText(this.context, getResources().getString(R.string.tip_save_to)+fullPath, Toast.LENGTH_LONG).show(); press(Bitmap.CompressFormat.PNG,100, newFileOutputStream(fullPath)); } catch(FileNotFoundExceptione) { Toast.makeText( this.context, getResources().getString(R.string.tip_sava_failed) +fullPath,Toast.LENGTH_LONG).show(); e.printStackTrace(); } }利用軟件就可以畫出你想要的簡(jiǎn)筆畫,比如像菠蘿一樣的水果,哆啦A夢(mèng)一樣的卡通人物,還有很多很多,只要你想的到的都可以利用它畫出來(lái)。創(chuàng)建的界面如圖1所示,畫出的菠蘿如圖2所示,畫出的哆啦A夢(mèng)如圖所示。圖1,打開(kāi)軟件 圖2,用畫筆畫菠蘿圖3,用畫筆畫哆啦A夢(mèng)只有畫畫遠(yuǎn)遠(yuǎn)不是我們要的要的功能,當(dāng)然還有幾乎所有軟件都具備的一個(gè)功能,設(shè)置。菜單中含有形狀、清除、保存、設(shè)置。進(jìn)入設(shè)置,有很多關(guān)于畫畫的各種功能。畫筆的寬度pen_width為默認(rèn)初始寬度,畫筆的顏色pen_color為默認(rèn)顏色,畫布的顏色為空即是白色,畫畫的風(fēng)格為初始默認(rèn)狀態(tài),以下是進(jìn)入設(shè)置的部分代碼。圖4是菜單現(xiàn)實(shí)設(shè)置的界面。圖5是進(jìn)入設(shè)置之后的界面,有畫刷寬度、顏色等功能的選擇。importjava.text.SimpleDateFormat;importjava.util.zip.ZipEntry;importjava.util.zip.ZipFile;importorg.vhow.paintpad.R;importorg.vhow.paintpad.helper.ColorPickerDialog;importorg.vhow.paintpad.tools.Brush;importandroid.content.DialogInterface;importandroid.content.SharedPreferences;importandroid.content.pm.ApplicationInfo;importandroid.content.pm.PackageManager.NameNotFoundException;importandroid.os.Bundle;importandroid.preference.CheckBoxPreference;importandroid.preference.Preference;importandroid.preference.Preference.OnPreferenceClickListener;importandroid.preference.PreferenceActivity;/***當(dāng)用戶選擇設(shè)置按鈕,就跳轉(zhuǎn)到這個(gè)activity。*當(dāng)用戶點(diǎn)擊的時(shí)候、實(shí)現(xiàn)OnPreferenceClickListener接口。*優(yōu)先調(diào)用onPreferenceClick()。*/publicclassSettingsActivityextendsPreferenceActivityimplements OnPreferenceClickListener,ColorPickerDialog.OnColorChangedListener{ SharedPreferencesprefs=null; Preferencepen_width=null; Preferencepen_color=null; Preferencecanvas_bg_color=null; Stringpen_width_key; Stringpen_color_key; CheckBoxPreferencepen_style=null; PreferenceversionName; PreferencelastBuildTime; @Override protectedvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); /** *XML對(duì)這個(gè)activity的虛擬設(shè)置 */ addPreferencesFromResource(R.xml.settings); pen_width_key=getResources().getString(R.string.pen_width_key); pen_color_key=getResources().getString(R.string.pen_color_key); /** *找到要處理的對(duì)象。 */ pen_width=(Preference)findPreference(getResources().getString( R.string.pen_width_key)); pen_color=(Preference)findPreference(getString(R.string.pen_color_key)); versionName=(Preference)findPreference(getString(R.string.setting_about_version_key)); lastBuildTime=(Preference)findPreference(getString(R.string.setting_about_build_key)); versionName.setSummary(getVersionName()); lastBuildTime.setSummary(getLastBuiltTime()); /** *注冊(cè)監(jiān)聽(tīng)器。包含畫刷寬度,畫刷顏色。 */ pen_width.setOnPreferenceClickListener(this); pen_color.setOnPreferenceClickListener(this); } privateStringgetLastBuiltTime() { StringlastBuiltTimeString="Unknown"; try { ApplicationInfoai=getPackageManager().getApplicationInfo( getPackageName(),0); ZipFilezf=newZipFile(ai.sourceDir); ZipEntryze=zf.getEntry("classes.dex"); longtime=ze.getTime(); lastBuiltTimeString=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss") .format(newjava.util.Date(time)); } catch(Exceptione) { //最后編譯時(shí)間是“未知”. } returnlastBuiltTimeString; } privateStringgetVersionName() { StringversionName="Unknown"; try { versionName=this.getPackageManager().getPackageInfo( getPackageName(),0).versionName; } catch(NameNotFoundExceptione) { //最后的版本名是“未知”。 } returnversionName; } /** *處理該事件的優(yōu)先權(quán) */ 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; } /** *彈出一個(gè)對(duì)話框SeekBar以控制畫筆的寬度 */ privatevoidshowSetBrushWidthDialog() { SeekBarDialogseekBarDialog=newSeekBarDialog(this); seekBarDialog.setTitle(Brush.getPen().getStrokeWidth()+"像素"); seekBarDialog.setButton( getResources().getString(R.string.alert_dialog_ok), newDialogInterface.OnClickListener() { publicvoidonClick(DialogInterfacedialog,intwhichButton) { dialog.dismiss(); } }); seekBarDialog.show(); } /** *當(dāng)畫刷顏色改變時(shí),這個(gè)方法將被調(diào)用。 */ publicvoidcolorChanged(intcolor) { Brushpen=Brush.getPen(); pen.setColor(color); }}圖4,打開(kāi)菜單鍵圖5,打開(kāi)菜單中的設(shè)置當(dāng)在菜單中選擇形狀之后,就會(huì)彈出形狀的界面,在形狀界面有很多形狀供選擇,下面可以有幾個(gè)形狀的源代碼。當(dāng)選擇需要形狀之后就進(jìn)入到畫布,畫出的圖形就會(huì)是選擇到的形狀。直線代碼如下:importorg.vhow.paintpad.tools.Brush;importandroid.graphics.Canvas;/***直線。*/publicclassStraightLineextendsDrawing{ @Override publicvoiddraw(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;importandroid.graphics.Canvas;importandroid.graphics.Path;/***跟蹤手指在屏幕上運(yùn)動(dòng)。*/publicclassPathLineextendsDrawing{ PathmPath=null; privatefloatmX,mY; privatestaticfinalfloatTOUCH_TOLERANCE=4; publicPathLine() { mPath=newPath(); } @Override publicvoiddraw(Canvascanvas) { canvas.drawPath(this.mPath,Brush.getPen()); } @Override publicvoidfingerDown(floatx,floaty,Canvascanvas) { mPath.reset(); mPath.moveTo(x,y); this.mX=x; this.mY=y; } @Override publicvoidfingerMove(floatx,floaty,Canvascanvas) { floatdx=Math.abs(x-mX); floatdy=Math.abs(y-mY); if(dx>=TOUCH_TOLERANCE||dy>=TOUCH_TOLERANCE) { mPath.quadTo(mX,mY,(x+mX)/2,(y+mY)/2); mX=x; mY=y; } this.draw(canvas); } @Override publicvoidfingerUp(floatx,floaty,Canvascanvas) { mPath.lineTo(mX,mY); this.draw(canvas); mPath.reset(); }}圖6,打開(kāi)菜單中的形狀功能在設(shè)置中就可以進(jìn)行顏色選擇,顏色的設(shè)置用public公有類ColorPickerDialog進(jìn)行設(shè)置,定義顏色改變的方法colorChanged,下面是顏色設(shè)置的代碼,圖7是進(jìn)入到顏色設(shè)置的界面。importandroid.app.Dialog;importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.graphics.RectF;importandroid.graphics.Shader;importandroid.graphics.SweepGradient;importandroid.os.Bundle;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.STROKE); mPaint.setStrokeWidth(32); mCenterPaint=newPaint(Paint.ANTI_ALIAS_FLAG); mCenterPaint.setColor(color); mCenterPaint.setStrokeWidth(5); } privatebooleanmTrackingCenter; privatebooleanmHighlightCenter; @Override protectedvoidonDraw(Canvascanvas) { floatr=CENTER_X-mPaint.getStrokeWidth()*0.5f; canvas.translate(CENTER_X,CENTER_X); canvas.drawOval(newRectF(-r,-r,r,r),mPaint); canvas.drawCircle(0,0,CENTER_RADIUS,mCenterPaint); if(mTrackingCenter) { intc=mCenterPaint.getColor(); mCenterPaint.setStyle(Paint.Style.STROKE); if(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); } } @Override protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec) { setMeasuredDimension(CENTER_X*2,CENTER_Y*2); } privatestaticfinalintCENTER_X=100; privatestaticfinalintCENTER_Y=100; privatestaticfinalintCENTER_RADIUS=32; privateintave(ints,intd,floatp) { returns+java.lang.Math.round(p*(d-s)); } privateintinterpColor(intcolors[],floatunit) { if(unit<=0) { returncolors[0]; } if(unit>=1) { returncolors[colors.length-1]; } floatp=unit*(colors.length-1); inti=(int)p; p-=i; //nowpisjustthefractionalpart[0...1)andiistheindex intc0=colors[i]; intc1=colors[i+1]; inta=ave(Color.alpha(c0),Color.alpha(c1),p); intr=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.f; @Override publicbooleanonTouchEvent(MotionEventevent) { floatx=event.getX()-CENTER_X; floaty=event.getY()-CENTER_Y; booleaninCenter=java.lang.Math.sqrt(x*x+y*y)<=CENTER_RADIUS; switch(event.getAction()) { caseMotionEvent.ACTION_DOWN: mTrackingCenter=inCenter; if(inCenter) { mHighlightCenter=true; invalidate(); break; } caseMotionEvent.ACTION_MOVE: if(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.setColor(interpColor(mColors,unit)); invalidate(); } break; caseMotionEvent.ACTION_UP: if(mTrackingCenter) { if(inCenter) { mListener.colorChanged(mCenterPaint.getColor()); } mTrackingCenter=false;//sowedraww/ohalo invalidate(); } break; } returntrue; } } publicColorPickerDialog(Contextcontext,OnColorChangedListenerlistener, intinitialColor,Stringstr) { super(context); mListener=listener; mInitialColor=initialColor; title=str; } @Override protectedvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); OnColorChangedListenerl=newOnColorChangedListener() { publicvoidcolorChanged(intcolor) { mListener.colorChanged(color); dismiss(); } }; setContentView(newColorPickerView(getContext(),l,mInitialColor)); setTitle(title); }}圖7,打開(kāi)設(shè)置中的顏色選項(xiàng)

第五章軟件測(cè)試軟件測(cè)試是把各個(gè)功能模塊裝配成一個(gè)完整的軟件來(lái)測(cè)試。在這個(gè)過(guò)程中不僅應(yīng)該發(fā)現(xiàn)設(shè)計(jì)和編碼的錯(cuò)誤,還應(yīng)該驗(yàn)證軟件確實(shí)能提供需求說(shuō)明書中指定的功能,而且軟件的動(dòng)態(tài)特性也符合預(yù)定的要求。根據(jù)軟件測(cè)試的要求,將各個(gè)模塊部分:形狀、清除、保存、設(shè)置、以及設(shè)置中的功能綜合成軟件——小畫家觸屏畫軟件測(cè)試,測(cè)試的結(jié)果:本軟件根據(jù)設(shè)計(jì)要求,達(dá)到了預(yù)期的開(kāi)發(fā)設(shè)想,完成了開(kāi)發(fā)任務(wù)。本軟件界面設(shè)計(jì)上緊緊跟隨軟件設(shè)計(jì)潮流。系統(tǒng)的編碼上,系統(tǒng)代碼的編寫風(fēng)格也基本趨于模塊化,提高了系統(tǒng)的可讀性和可擴(kuò)展性。本軟件能夠?qū)崿F(xiàn)預(yù)期的改變形狀、清除、保

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論