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

下載本文檔

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

文檔簡介

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

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

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

第三章需求分析本設(shè)計為android系統(tǒng)手機(jī)上的一個畫畫小軟件,該軟件主要是在eclipse開發(fā)工具上用java語言編寫的一個結(jié)果。eclipse是一個開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于經(jīng)過插件組件構(gòu)建開發(fā)環(huán)境。而java語言具有卓越的通用性、高效性、平臺移植性和安全性。Eclipse編輯器引入了編輯環(huán)境方面的一些增強(qiáng)功能,諸如單詞補(bǔ)齊,增量搜索,代碼凸顯,縮進(jìn)文本,標(biāo)記行號,彩色打印,和快捷方式。eclipse編輯器還提供了許多為特定語言設(shè)計的功能,比如在你輸入原型和函數(shù)調(diào)用的時候它能夠自動完成這些字符串的輸入。生成的應(yīng)用程序安裝到手機(jī)后,直接點(diǎn)擊打開,操作簡單明了,軟件具有形狀的選擇、畫筆寬度的調(diào)整、畫筆顏色的改變、繪畫風(fēng)格的改變、整屏清除以及保存等功能。3.1軟件功能描述小畫家畫畫軟件主要是提供給使用android系統(tǒng)智能手機(jī)的用戶,增加業(yè)余時間的趣味性。本軟件主要有簡筆畫畫、上色、保存等功能。形狀選擇,打開軟件,選擇菜單鍵,就會彈出菜單里面的功能,選擇形狀功能就能夠自由的選擇需要的形狀,形狀有軌跡線、直線、矩形、橢圓形、圓形、點(diǎn)、還有橡皮擦等不同的形狀。清除,打開軟件,選擇菜單鍵,就會彈出菜單里面的功能,清除功能就是將所繪制的整張畫布全部清除。保存,打開軟件,選擇菜單鍵,就會彈出菜單里面的功能,如果繪畫好一張滿意的畫,選擇保存就能夠?qū)D保存在手機(jī)里面,以供自己以后欣賞或者與朋友分享。設(shè)置,打開軟件,選擇菜單鍵,就會彈出菜單里面的功能,選擇設(shè)置,就能夠進(jìn)入到設(shè)置畫面,設(shè)置里面有畫刷寬度的調(diào)節(jié)、畫筆顏色的選擇、畫畫風(fēng)格的選擇、是否是全屏模式、當(dāng)前所使用的版本、以及能夠看到最后調(diào)試的時間與快捷鍵和對開發(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è)置。選擇需要的形狀就能夠了。清除清除管理模塊功能描述用戶需要清除整個畫布操作序列點(diǎn)擊menu按鈕,屏幕下方顯示菜單。點(diǎn)擊“清除”就把整張畫布清除了。保存保存管理模塊功能描述用戶需要保存所畫的畫操作序列點(diǎn)擊menu按鈕,屏幕下方顯示菜單。點(diǎn)擊“保存”就將所畫的畫保存下來了。顏色顏色管理模塊功能描述用戶選擇畫刷顏色操作序列點(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軟件需求分析隨著社會的發(fā)展,時代的進(jìn)步,人們對生活品質(zhì)的不斷提高,對生活的享受心理也越來越強(qiáng),越來越注重休閑娛樂。只有抓住現(xiàn)在人們的心理需要才能在現(xiàn)在有得一席之地。同樣在手機(jī)軟件方面也是一樣的,現(xiàn)在的大多數(shù)人的手機(jī)里面占據(jù)一大部分內(nèi)存的都是休閑娛樂的游戲,就是在無聊的時候打發(fā)時間的。而我們這款android小畫家畫圖軟件就是提供給那些愛畫簡筆畫的畫圖愛好者,因此,既然現(xiàn)在有這個需求,我們就能夠滿足用戶的這個需要,開發(fā)這么一款畫圖的軟件。3.4軟件概念結(jié)構(gòu)設(shè)計這一設(shè)計階段是在需求分析的基礎(chǔ)上而進(jìn)行的,設(shè)計出能夠滿足用戶需求的各種實(shí)體,以及它們之間的關(guān)系,為后面的邏輯設(shè)計打下基礎(chǔ)。概念結(jié)構(gòu)的主要特點(diǎn)是:能真實(shí)、充分地反映現(xiàn)實(shí)世界,包括事物和事物之間的聯(lián)系,能滿足用戶對軟件功能的要求。易于理解,從而能夠用它和不熟悉使用手機(jī)的用戶交換意見,用戶的積極參與是軟件開發(fā)設(shè)計成功的關(guān)鍵。易于更改,當(dāng)應(yīng)用環(huán)境和應(yīng)用要求改變時,容易對概念模型修改和擴(kuò)充。軟件開發(fā)在小畫家軟件開發(fā)中存在系統(tǒng)用例、開發(fā)人員與用戶、數(shù)據(jù)流程處理、數(shù)據(jù)表述等幾個對象的關(guān)系,具體描述如下面各圖所示。軟件開發(fā)用戶管理用戶管理開發(fā)維護(hù)開發(fā)維護(hù)后臺數(shù)據(jù)維護(hù)后臺數(shù)據(jù)維護(hù)軟件更新 開發(fā)人員軟件更新系統(tǒng)用例圖用戶小畫家軟件開發(fā)人員 用戶信息 軟件下載用戶小畫家軟件開發(fā)人員 軟件信息 用戶情況 軟件升級 建議反饋總體流程圖軟件管理軟件管理用戶 軟件信息用戶軟件信息 軟件下載條件 軟件情況開發(fā)人員 下載信息 軟件信息 軟件信息 下載條件開發(fā)人員軟件信息表用戶下載信息表軟件信息表用戶下載信息表 用戶下載情況 用戶信息 下載量信息 軟件信息 下載信息 下載量信息下載管理用戶管理 下載量信息下載管理用戶管理 用戶信息開發(fā)人員 用戶信息 用戶信息 下載量信息開發(fā)人員用戶管理表用戶管理表數(shù)據(jù)流圖處理圖下載情況軟件卸載信息表軟件信息表用戶信息表下載情況軟件卸載信息表軟件信息表用戶信息表開發(fā)團(tuán)信息表下載信息表開發(fā)團(tuán)信息表下載信息表用戶排行表數(shù)據(jù)表述E-R圖第四章軟件詳細(xì)設(shè)計4.1軟件設(shè)計原理本軟件基于android系統(tǒng)智能手機(jī),在android系統(tǒng)設(shè)備上運(yùn)行,就像打開手機(jī)播放器一樣簡單打開軟件就能夠操作。它是隨著android系統(tǒng)手機(jī)的興起,借助android系統(tǒng)平臺開發(fā)的一個軟件。主要是利用不斷成熟的android系統(tǒng),結(jié)合java語言與XML而產(chǎn)生的軟件。Java語言具有卓越的通用性、高效性、平臺移植性和安全性,而可擴(kuò)展標(biāo)記語言XML是用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語言,能夠用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對自己的標(biāo)記語言進(jìn)行定義的源語言。這樣開發(fā)的軟件不但在界面上比較美觀,而且能夠在android系統(tǒng)平臺上穩(wěn)定運(yùn)行。4.2軟件模塊設(shè)計打開軟件即可進(jìn)入到畫畫操作界面,也能夠選擇各種各樣的功能,利用當(dāng)前有的功能能夠隨心所欲的畫出想要的簡筆畫,在選擇各種各樣的功能的時候也有界面的跳轉(zhuǎn)彈出和菜單功能的選擇。因?yàn)楝F(xiàn)在是測試版本,不存在與互聯(lián)網(wǎng)連接的情況,這樣對用戶的私人隱私也具有絕正確安全保密,因?yàn)橹皇且豢町媹D的軟件,因此我們不會訪問用戶的手機(jī)聯(lián)系人、短信、以及地理位置信息,同時也不需要獲得手機(jī)的任何權(quán)限,只是能夠運(yùn)行和使用就能夠了,這樣給開發(fā)團(tuán)隊(duì)的建議也只能發(fā)在開發(fā)團(tuán)隊(duì)的郵箱中。下面是軟件各種界面的截圖以及部分代碼。打開軟件,就如同打開音樂播放器一樣簡單,打開之后,就進(jìn)入軟件的主界面,這就是一張畫布,能夠在上面隨意畫自己喜歡的線條。這是軟件最基本,也是最重要的部分,在軟件中首先要創(chuàng)立這樣一個activity,才能展開其它的功能。首先要在手機(jī)界面創(chuàng)立一個這樣的畫布,這是我們最重要的起步,創(chuàng)立一個界面activity,才能進(jìn)行下一步的操作,用public公有類,因?yàn)橹饕侵鹘缑鎍ctivity涉及的其它很多方法的訪問,設(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)空、屏幕上此時的信息為默認(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; } 手指在屏幕上觸動的時候,用private私人方法fingerMove,會記錄下所運(yùn)動的軌跡或者方法所規(guī)定的形狀,處理手指的動作,這是讓手指在畫布activity的界面處理手指所留下的坐標(biāo),將所有坐標(biāo)的點(diǎn)組成的線就是所畫出來的圖形。privatevoidreDraw() { invalidate(); } /** *處理手指的動作。 *@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; } /** *處理手指的動作 *@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.isMoving=false; drawing.fingerDown(x,y,paper); } 如果處理好一張圖,需要保存,調(diào)用公用public方法saveBitmap,對畫好的圖進(jìn)行保存,這個時候,軟件會檢測是否有保存的介質(zhì)存在,如果不存在,就保存不了,有可能還會引起軟件的崩潰;如果檢測到存在保存介質(zhì),編輯圖片名字進(jìn)行保存就能夠,如果沒有名字,軟件默認(rèn)給一個名字,進(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)檢查到儲存介質(zhì)是存在的,即私人的private方法saveToSdcard來執(zhí)行,在SD卡中創(chuàng)立屬于軟件的保存文件夾,訪問路徑由“/”符號來分開,保存時間為系統(tǒng)時間,保存的圖片格式為".png"格式,最后就是將圖片進(jìn)行儲存。 /** *保存位圖在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(); } }利用軟件就能夠畫出你想要的簡筆畫,比如像菠蘿一樣的水果,哆啦A夢一樣的卡通人物,還有很多很多,只要你想的到的都能夠利用它畫出來。創(chuàng)立的界面如圖1所示,畫出的菠蘿如圖2所示,畫出的哆啦A夢如圖所示。圖1,打開軟件 圖2,用畫筆畫菠蘿圖3,用畫筆畫哆啦A夢只有畫畫遠(yuǎn)遠(yuǎn)不是我們要的要的功能,當(dāng)然還有幾乎所有軟件都具備的一個功能,設(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)到這個activity。*當(dāng)用戶點(diǎn)擊的時候、實(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對這個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); /** *找到要處理的對象。 */ 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()); /** *注冊監(jiān)聽器。包含畫刷寬度,畫刷顏色。 */ 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) { //最后編譯時間是“未知”. } 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; } /** *彈出一個對話框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)畫刷顏色改變時,這個方法將被調(diào)用。 */ publicvoidcolorChanged(intcolor) { Brushpen=Brush.getPen(); pen.setColor(color); }}圖4,打開菜單鍵圖5,打開菜單中的設(shè)置當(dāng)在菜單中選擇形狀之后,就會彈出形狀的界面,在形狀界面有很多形狀供選擇,下面能夠有幾個形狀的源代碼。當(dāng)選擇需要形狀之后就進(jìn)入到畫布,畫出的圖形就會是選擇到的形狀。直線代碼如下: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)動。*/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,打開菜單中的形狀功能在設(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.1415926f; @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[01] 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,打開設(shè)置中的顏色選項(xiàng)

第五章軟件測試軟件測試是把各個功能模塊裝配成一個完整的軟件來測試。在這個過程中不但應(yīng)該發(fā)現(xiàn)設(shè)計和編碼的錯誤,還應(yīng)該驗(yàn)證軟件確實(shí)能提供需求說明書中指定的功能,而且軟件的動態(tài)特性也符合預(yù)定的要求。根據(jù)軟件測試的要求,將各個模塊部分:形狀

溫馨提示

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

最新文檔

評論

0/150

提交評論