基于Android平臺的日歷與日程提醒-本科畢業(yè)論文_第1頁
基于Android平臺的日歷與日程提醒-本科畢業(yè)論文_第2頁
基于Android平臺的日歷與日程提醒-本科畢業(yè)論文_第3頁
基于Android平臺的日歷與日程提醒-本科畢業(yè)論文_第4頁
基于Android平臺的日歷與日程提醒-本科畢業(yè)論文_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、* 屮也幣 DATONG UNIVERSITY 一本科畢業(yè)論文(設(shè)計)題目:基于Android平臺的日歷與日程提醒學(xué)院:物理與電子科學(xué)學(xué)院班級:2011級 電子本科四班姓名:羅攀指導(dǎo)教師:孫建新 職稱:講師完成日期:2015 年 5月 10 日基于 Android 平臺的日歷與日程提醒摘要:近些年來,智能技術(shù)的興起給人們帶來了極大的便利,尤其是智能 手機的出現(xiàn),讓人們的生活質(zhì)量變得越來越好。在 iPhone 引導(dǎo)的智能手機潮流 中,基于 Android 系統(tǒng)的智能手機,憑借開源以及低價迅速贏得市場的認可,成 為目前占領(lǐng)市場份額最大的手機系統(tǒng)。 Android 的開源使其不斷的更新與創(chuàng)新, 進而

2、讓其保持持久的生命力。因此,基于 Android 的手機、平板以及智能家居都 會成為市場的主流, 同樣的基于 Android 的手機軟件的開發(fā)也會成為炙手可熱的 行業(yè)。本軟件就是基于 Android 系統(tǒng)的,開發(fā)出一款簡單的日歷以及日程記錄和 鬧鈴提醒, 適用于各類群體。 本軟件很簡潔和不捆綁其他繁雜的功能等優(yōu)點。 在 具體的實現(xiàn)過程中,嚴格遵循軟件開發(fā)流程,主要有可行性判斷、需求分析、總 體設(shè)計、詳細設(shè)計、代碼編寫、軟件測試等步驟。需要使用的工具有Ecplise、Android 手機一部、電腦與手機驅(qū)動線一根。本軟件的主要功能界面有,日歷顯 示界面、所有日程界面、添加日程界面、日程提醒操作。

3、關(guān)鍵詞: Android 、Eclipse 、日歷概述目前,隨著移動客戶端的迅猛發(fā)展。越來越多的計算機軟件也被設(shè)計成并 用于移動客戶端。在智能手機平臺中, Android 作為最具有發(fā)展?jié)摿εc優(yōu)勢,在 該軟件平臺的軟件開發(fā)成為移動端開發(fā)的熱門。到現(xiàn)在為止, Android 軟件的開發(fā)日趨成熟。每時每刻都有新產(chǎn)品在各大應(yīng) 用商店上架, 軟件的龐大數(shù)量決定了用戶選擇的多向性, 同類不同款軟件的相互 競爭不斷加強, 整個市場優(yōu)勝劣汰。 正因如此, 用戶體驗成為軟件開發(fā)是否成功 的關(guān)鍵。首先,我們必須完成最大限度的需求分析。根據(jù)調(diào)查,目前的大多數(shù)日 歷軟件,例如 365 日歷、萬年歷等等。這樣的安裝包

4、龐大,功能繁雜。本軟件針 對此,只實現(xiàn)日歷和日程提醒, 可以查詢 19002100年之間某月的日歷, 可以在 任意的日期中添加日程并設(shè)置提醒,提醒可以是鬧鈴或者震動方式提醒用戶。全球手機市場概況根據(jù) Strategy Analytics 發(fā)布的最新數(shù)據(jù),今年第三季度, IOS 和 Android 和占全球智能手機 96%的份額。 IOS 占有的份額為 12.3%,而 Android 占有的份 額是83.6%。An droid繼續(xù)稱霸全球智能手機操作系統(tǒng)市場。Win dows Pho ne占 市場份額 3.3%。Strategy Analytics 公司執(zhí)行主管 Neil Mawston 表示:

5、“目前, Android 對全 球智能手機市場的統(tǒng)治是無法撼動的, 低價的服務(wù)和用戶友好的軟件不斷吸引全 球硬件廠商、運營商和消費者。 ”總的來看,全球智能手機出貨量比去年同期增長了 27%,達到了 3.024 億部。 去年第三季度,全球智能手機出貨量為 2.529億部。事實上,智能手機廠商小米 一直在中國和印度大力推進廉價設(shè)備。使得亞洲成為智能手機增長的主要地區(qū), 尤其是中國?,F(xiàn)有手機軟件市場概況隨著 3G 技術(shù)在中國的普及和 4G 網(wǎng)絡(luò)的逐步推廣,在移動互聯(lián)網(wǎng)技術(shù)的推 動下,手機應(yīng)用市場將會迎來巨大機遇。 近年來, 各類軟件在手機客戶端領(lǐng)域發(fā) 展。比如,非常有名的社交平臺 WeChat、W

6、eibo、Facebook 等都已經(jīng)有了自己的 客戶端軟件。還有,手機辦公軟件也逐漸進入人們的視野,主要有金山推出的 WPS Offic手機版和三星公司的POLRIS Office。音影娛樂播放軟件,有暴風(fēng)影 音、騰訊視頻、愛奇藝等等。上述這些成熟的手機客戶端軟件,證實了 Android 手機操作系統(tǒng)的優(yōu)越性。1.3本課題的目的、意義本軟件旨在為快節(jié)奏生活的人群提供一個查看日期以及日程提醒的小助手。 比如,主界面就是當前月份的顯示, 每個月的顯示由不同的顏色, 星期名稱也有 不同的顏色;還有指定某一天查看月份、年份;還有日程添加界面,以黑色為背 景;還有鈴聲提醒或者震動提醒日程。本軟件的開發(fā)流

7、程遵循軟件工程開發(fā)流程,在這個過程中,我們必須從項目 計劃開始、經(jīng)過需求分析、 軟件設(shè)計、代碼編寫、系統(tǒng)測試、到最后的運行維護, 我們學(xué)習(xí)了軟件開發(fā)的生命周期。本軟件的開發(fā),屬于 Android 平臺軟件開發(fā)。需要熟悉 Android 的基本架構(gòu)、 Dalvik 虛擬和學(xué)會使用 Android API 。還要涉及到 UI 設(shè)計,主要使用 Canvas 繪制基本控件。本軟件的界面簡潔,便于用戶使用。附屬功能,都在菜單里面。各個功能有 自己的界面,功能區(qū)分清晰。相關(guān)技術(shù)介紹開發(fā)工具及開發(fā)環(huán)境介紹( 1)Eclipse 是很多程序員們最常使用的開發(fā)工具,它具有跨平臺、自有集 成的特點。最初主要用于編

8、寫 Java 代碼,但現(xiàn)在也有一些人通過使用插件讓它 成為多語言的開發(fā)工具,比如C+ffi Python語言也可以使用Eclipse進行開發(fā)。 Eclipse 支持眾多插件的安裝, 這就使它具有靈活性, 它還擁有一個標準插件集, 其中最有代表性的是 Java Development Kit ,也就是Java開發(fā)工具JDK,眾所 周知,要使用 Eclipse 編寫Java代碼,必須安裝 JDK 在本設(shè)計中,Eclipse 主要用于前臺客戶端界面的設(shè)計和實現(xiàn),用于前臺代碼的編制,包括 UI 代碼, 獲取網(wǎng)絡(luò)數(shù)據(jù),加載網(wǎng)絡(luò)數(shù)據(jù)等一系列用戶能夠直接接觸到的界面。(2)在 Eclipse 編譯 IDE

9、環(huán)境中,需安裝 ADT(Android Development Tools)Plug-in, 這是 Android 在 Eclipse 上的開發(fā)工具。主要用于 Android 開發(fā) 包或者開發(fā)工具的升級下載。 另外,還有安裝 SDK(Software Development Kit) , 也就是軟件開發(fā)工具包, 這里面包含了 Android 開發(fā)所需要的特定工具類包, 硬 件平臺,模擬器等,我們在 Android 開發(fā)過程中用到的所有源代碼都保存在 SDK 中,我們正是通過SDK來查看那些源代碼,它為程序員們提供了庫文件和開發(fā)工 具。(3)流程設(shè)計使用的軟件是 PowerDesigner 。A

10、ndroid 相關(guān)技術(shù)介紹Android 開發(fā)架構(gòu)介紹雖然說 Android 系統(tǒng)是搭載在移動終端設(shè)備上的,比如手機、平板等。但它 實際上是建立在 Linux 之上的,該平臺自底向上由 Linux 內(nèi)核層,運行庫層,應(yīng)用程序框架層,應(yīng)用程序?qū)咏M成。An droid系統(tǒng)的構(gòu)建方法是軟件疊層(Software Stack),這種構(gòu)建方法能夠保證層和層之間進行分隔,當某一層發(fā)生變化時不會 影響其上、下層,因此使整個系統(tǒng)的分層結(jié)構(gòu)具有很低的耦合性圖2-1顯示了 An droid系統(tǒng)結(jié)構(gòu):APPI.TCATTOi) FRAMEWiiRKAPPLICATIONSActivity ManagerC indm

11、ii s ManagerPitckn(r Munugcrf Xnriflcjirion k Mnn;iTC Content ProviderCRrsnurM IVliLnagcir)CEEE) (LIBRARIESC HurtsrclingerMeUiir rani workSQI.itcF rceTy pcOpcnGLKSSSIWvbkltANDROID RUNTIMEamcraLIWX KERNEL lihietoothX -Driver J圖2-1 An droid系統(tǒng)體系結(jié)構(gòu)圖An droid四大組件基本介紹在An droid應(yīng)用程序開發(fā)時,一般需要用到應(yīng)用程序運行所必須的組件, 我們

12、通過實例化它們來使用,主要有四種類型:Activity :從字面上理解,Activity 是活動的意思。一個Activity 通常就 是一個用戶可看到的界面,它可以說是程序與用戶交互的窗口, 是An droid組件 中用的最多也最重要的一個組件。從界面上來看,一個 Activity 能夠響應(yīng)窗口 事件,由各類控件、菜單等元素組成。對于開發(fā)者而言,必須繼承Activity 類才能進行編碼,從而實現(xiàn)各種功能,展示不同界面。Service :和Activity 不同,服務(wù)沒有自己的界面,并且運行在后臺,每一 個系統(tǒng)Service都封裝有一個完整的功能邏輯,通過Intent與其他組件聯(lián)系, 來開啟服務(wù)

13、或關(guān)閉服務(wù)。Broadcast Receiver :即廣播接收者,不執(zhí)行任何任務(wù),僅僅用于程序不同 組件之間傳遞信息,它像 Service 一樣,也不包括界面。Con te nt Provider :中文名即為內(nèi)容提供者,它是 An droid中不同應(yīng)用程序 之間的數(shù)據(jù)共享的媒介。An droid 界面 Activity 介紹An droid的界面是由一個個繼承了Activity父類的Java類組成,只有繼承了 Activity的子類才能讓用戶看到,Activity在被創(chuàng)建,運行,結(jié)束,經(jīng)歷了 一系列的生命周期。An droid中提供了 Activity的生命周期方法,它們分別是:on Cre

14、ate( ), on Start( ),on Resume(,on Pause() on Stop( ),on Destroy( ), on Restart()。 當一個Activity開始運行之后,就自動按順序調(diào)用并執(zhí)行onCreate(卜onStart()、 onResume(方法,當一個Activity被其他的Activity替代掉時,執(zhí)行onPause() on Stop()方法,當它重新成為當前界面時,系統(tǒng)就會依次執(zhí)行on Restart()、onStart()、onResume方法。當一個 Activity 被結(jié)束掉時,執(zhí)行 onPause( )onStop(), on Destr

15、oy()。圖2-2顯示的就是API提供的Activity的生命周期圖圖2-2 Activity生命周期圖系統(tǒng)需求分析3.1 可行性分析(1)技術(shù)可行性:要實現(xiàn)本軟件的所有設(shè)計內(nèi)容,要求設(shè)計人員能夠熟練 使用 Eclipse 開發(fā)工具。同時還要熟悉 Android 系統(tǒng)的架構(gòu)和 Android 的基本組 件,還要求設(shè)計人員能夠熟練掌握 Java 語言。在開始確定研究課題之后,設(shè)計 人員就 Android 設(shè)計方面進行了學(xué)習(xí)和研究,并且在大三的課程中已經(jīng)學(xué)習(xí)了 Java語言,并能夠使用Java語言編寫代碼,所以技術(shù)方面是可行的。(2)經(jīng)濟可行性:要進行本軟件的開發(fā),需要具備的硬件條件包括:一臺 使

16、用 Windows 7 操作系統(tǒng)的計算機, 一部 Android 手機, 所以在硬件方面條件可 行。軟件方面,安裝了所需的所有軟件,只有 Eclipse。同時,本軟件的設(shè)計, 是基于研究的目的,不需要經(jīng)濟支持,如果用于商業(yè)用途,在獲取利益方面,可 以采取收取商家廣告費的方式。因此在經(jīng)濟上,本軟件可行。(3)操作可行性:本軟件在 UI 的設(shè)計上做到了和功能模塊相結(jié)合的方式, 界面設(shè)計一目了然,操作簡單,在操作可行性方面,該軟件可行。功能需求分析(1)主界面不是An droid自帶的傳統(tǒng)控件組成,而是通過 Can vas繪制 而來的。承載整個界面的是一個矩形邊框,顏色是深紅色。通過 Canvas

17、切 割成六行七列格子。頭部是用來顯示當前日期的有關(guān)信息的。( 2)在主界面按下菜單鍵以后, 會有四個功能選項, 分別是今天、搜索、 日程和關(guān)于。對應(yīng)的功能是,回到今天的指定、搜索指定日期、添加修改日 程并設(shè)置提醒方式和關(guān)于此軟件的信息。( 3)在日程列表界面,以黑色作為主要背景, 已有日程以列表形式展現(xiàn)。 按下菜單鍵會有三個功能選項,分別是添加、修改和刪除。這里的日程存儲 是以數(shù)據(jù)庫的形式存放。 這里的操作需要使用數(shù)據(jù)庫的增刪改查的基本操作 語句。4系統(tǒng)設(shè)計4)在添加日程的界面里面, 是一個可以填寫標題和內(nèi)容的界面。 編寫完成之后,按下菜單鍵設(shè)置提醒時間,接著點擊完成,日程添加以及提醒就 成功

18、了。性能需求分析每一個軟件在投入使用之后,作為設(shè)計者,需要保證其能夠長期、有效、 安全、穩(wěn)定的運行,因此,我們做出以下的性能要求:(1)實用性原則:要求軟件做到實用性,讓盡可能多的用戶會認為這是一 個適合自己的實用性軟件, 并且充分考慮到用戶的操作習(xí)慣, 設(shè)計合理簡潔并實 用的界面。(2)安全性原則:要求用戶在使用軟件過程中,確保不會出現(xiàn)無故崩潰的 情況。無需填寫任何個人信息,隱私足以得到保護。(3)易用性原則:要求做到用戶使用時能夠得心應(yīng)手,操作簡單,指向明 確。(4)界面美觀原則:用戶與軟件直接進行接觸的就是界面,所以界面是否 美觀決定了用戶對該軟件的第一印象, 設(shè)計一個美觀大方的界面是實

19、現(xiàn)軟件成功 的第一保證。(5)可升級性原則:軟件具有其生命周期的,一個軟件的設(shè)計完成并且上 線之后并不一定代表著其完成使命, 軟件在后期使用過程中, 很可能會出現(xiàn)新的 需求。這時,就需要軟件具備良好的可升級性,能夠根據(jù)需求對軟件進行升級。(6)適配性原則:就目前而言,僅手機產(chǎn)品,常見的主流分辨率有: 240 x320, 320 x480, 800 x480, 854x480, 960 x540, 1280 x720;對于不同的分辨率手機,軟 件界面應(yīng)能完全適配, 這就要求軟件設(shè)計過程中考慮圖片使用, 多個界面設(shè)計等 問題。對于內(nèi)存而言,本軟件所占內(nèi)存極小。4.1總體系統(tǒng)設(shè)計441總體業(yè)務(wù)設(shè)計0

20、程屮息*本軟件在業(yè)務(wù)上分為三個部分,主要是查看日期、添加日程和設(shè)置提醒。 圖4-1就是本軟件的總體結(jié)構(gòu)圖:主界面屛11JL關(guān)于昇搜回到I 今I 天* !圖4-1總體結(jié)構(gòu)圖4.4.2底層實現(xiàn)結(jié)構(gòu)本軟件具體實現(xiàn)包括兩個方面:表示層和業(yè)務(wù)層。(1) 表示層,主要用于界面展示,在這一層需要進行UI設(shè)計(2)業(yè)務(wù)層,邏輯功能實現(xiàn),日期查看,日期指定和日程提醒。 圖4-2就是系統(tǒng)的概要設(shè)計圖:5.1.3檢測安裝是否正確圖4-2概要設(shè)計圖5 An droid客戶端實現(xiàn)5.1環(huán)境搭建5.1.1軟件準備及安裝jdk170_17.exe ??芍罸 HYPERLINK /javase/downloads/index

21、.jsp /javase/downloads/index.jsp下載adt-bundle-windows-x86_64.zip ??傻?http:/dl.google.eom/android/adt/adt-bundle-windows-x86_64-20140702.zip下載5.1.2配置環(huán)境變量變量名:JAVA_HOME變量值:C:Program FilesJavajdk1.7.0_17變量名:CLASSPATH變量值:C:Program FilesJavajdk1.7.0_17lib修改變量PATH添加變量值:;C:Program FilesJavajdk1.7.0_17bin;在ms

22、-dos窗口執(zhí)行以下命令:1、java -/ersion出面結(jié)果如下便是正確C: MisersabcJaua -uevsionjauA uersion *l_7_0_17*E Runtime Enuironnent Java HotSpat 64Bit Server UM java出現(xiàn)如下結(jié)果便是正確2、類文件*本并退岀產(chǎn)品回丁C: MJsers ahcjava用芒; Java (-options class ai*gs .,. 1執(zhí)行類或 jaoa - pt ions 11 = jai* jarf ile ai*gs 卄亠丄宀d執(zhí)行Jar文件 眞中選項包括-d32-d64server-hat

23、spot-CP或目錄和2 ip/Jai*文件的孝 classpath 或白錄和 zip/jai :用:分隔的貝墾和ZIP檔詞衰 D=value設(shè)置系統(tǒng)屬性-verbose:clas?!cJni底用詳細輸岀.-uersion$刖uei*sIon :-? -help 彌蘋-ea: -enableassert ion【:packa.按指定的粒度啟用斷言da t -paclkagename . . . I -c lassname 1disableassei*t ions : Cpackagienavne . ! = 1 禁用具有指定粒度的斷言esai enablesys啟用系統(tǒng)斷言-dsa : -d

24、isdbles j/s temase rt ions禁用系統(tǒng)斷言-agent lib:1Xj醫(yī) M SMI譯*serverp UHserver UM的同義詞【已過時】 認 UH 是 server.shouuersian痢出產(chǎn)怖取不幵繼努j re-Aestiletsearch nojrere strictsearch 在版本捜素審包括嚇除用戶專用 呃箱選項的幫助13、javac出現(xiàn)如下結(jié)果便是正確:的消息、運行的注輸出弓給運行時系統(tǒng)頂和文件名蘭自R3- J標記 Wcriroir- 耿文件名理程序的選項二置 空的位置理程序的名稱乍繞過默汪耗處理程序的位置的乜貫,的蒞置 生成類丈件 為性-ff:no

25、ne -Sf: lines * var, source!-nowarn -uerbose -deprecation -c lasspath 路徑 -cp 路輕sourcepath 空 boo tc lasspath extdlirs 冃杲; endorseddii*s 目:pi*DC: 110110, onl -process oir Ccr las$2認融銳程十-processorpath 瑤了性: T電目錄 -S 目錄-inplic it: -encoding -aource俵何反-tAt-jjet uers iorihelp r關(guān)鍵字u值IIIf5.1.4集成開發(fā)環(huán)境ADT的說明直接解壓

26、之前下載好的adt-bundle-windows-x86_64.zip,然后打開eclipse 文件夾,點擊運行 eclipse.exe。Niviqi Swuh ProjKt um Winisfcw HflpT. -nT :.廠Q J| Call Al arm jsva.jj Gridjavai | Ma in Java|i Record.dvar J Remind.java 0 Rem I nd Setting java 遼Week-javaimBirnnuarvi iiim mnia nn imTiiaiij man ! ! i nrd :dtJuopan.calendar.dblDBSr

27、viee.javatf: dtuopanxelendarinterfa匚us | J | 匚日I色n d arElem e nt.ja vagen Generated ava FilesAn droi d Mnn if 色 wtwn I lintixml project, properties5.4主要類的代碼展示1、CalendarElement接口定義繪制的抽象方法。代碼如下:package efaces;import an droid.graphics.Ca nvas;publicin terfaceCale ndarEleme nt public void draw(Canvas ca

28、nvas);2、CalendarParent 類通過實現(xiàn)CalendarElement 接口以獲得作為日歷內(nèi)容元 素的功能:通過抽象方法draw方法繪制日歷內(nèi)容元素。再者從資源文件中獲取些公共數(shù)據(jù)。代碼如下:public classprotectedprotectedprotectedprotectedprotectedprotectedprotectedCalendarParent implements CalendarElement Activity activity ;View view ;Paint paint = new Paint();float borderMargin ; /

29、日歷邊框的空白區(qū)域尺寸 float weekNameMargin ; / 周名稱的空白區(qū)域尺寸 float weekNameSize ; / 周名稱的字體大小 int sundaySaturdayColor ; / 周末字體顏色public CalendarParent(Activity activity, View view) this . activity= activity;this . view = view;borderMargin = activity.getResources().getDimension(R.dimen. calendar_border_margin ); we

30、ekNameMargin = activity.getResources().getDimension(R.dimen. weekname_margin ); weekNameSize = activity.getResources().getDimension(R.dimen. weekname_size );sundaySaturdayColor = activity.getResources().getColor(R.color. sunday_saturday_color );Overridepublic void draw(Canvas canvas) 3、Calendar 類通過繼

31、承自 CalendarParent 類,得到父類中從資源文件讀取的 數(shù)據(jù),同時還需實現(xiàn)抽象方法 draw 。代碼如下:public class Calendar extends CalendarParent private ArrayList elements = new ArrayList();public Grid grid;public Calendar(Activity activity, View view) super(activity, view);elements.add(new Border(activity, view); elements.add(new Week(act

32、ivity, view);grid = new Grid(activity, view); elements.add(grid);Overridepublic void draw(Canvas canvas) for (CalendarElement ce : elements) ce.draw(canvas);4、Border 類用來繪制日子邊框。代碼如下: public class Border extends CalendarParent public Border(Activity activity, View view) super(activity, view); paint.se

33、tColor(activity.getResources().getColor(R.color.bor der_color);Overridepublic void draw(Canvas canvas) float left = borderMargin;float top = borderMargin;float right = view.getMeasuredWidth() - left;float bottom = view.getMeasuredHeight() - top; canvas.drawLine(left, top, right, top, paint); canvas.

34、drawLine(right, top, right, bottom, paint); canvas.drawLine(right, bottom, left, bottom, paint); canvas.drawLine(left, bottom, left, top, paint); 5、Week類用來繪制周名稱。代碼如下: public class Week extends CalendarParent private String weekNames; private int weekNameColor; public Week(Activity activity, View vie

35、w) super(activity, view); weekNameColor = activity.getResources().getColor(R.color.weekname_color);weekNames = activity.getResources().getStringArray(R.array.week_name);paint.setTextSize(weekNameSize);Overridepublic void draw(Canvas canvas) float left = borderMargin;float top = borderMargin;float ev

36、eryWeekWidth = (view.getMeasuredWidth() - borderMargin * 2) / 7;float everyWeekHeight = everyWeekWidth;paint.setFakeBoldText(true);for (int i = 0; i weekNames.length; i+) if (i = 0 | i = weekNames.length - 1) paint.setColor(sundaySaturdayColor);elsepaint.setColor(weekNameColor);left = borderMargin +

37、 everyWeekWidth * i+ (everyWeekWidth -pain t.measureText(weekNamesi) / 2;canvas.drawText(weekNamesi, left, top +pai nt.getTextSize()+ weekNameMargi n, pain t);6 Grid類用來繪制日歷的主題部分:日期和網(wǎng)格。獲取數(shù)據(jù)在構(gòu)造方法中,繪 制日歷元素在draw方法中,更新日歷表頭在updateMsg方法中,生成當月顯示 文字在calculateDays方法中,獲得當前月份有記錄的日期信息在getRecordDays中。主要代碼如下:Overr

38、idepublic void draw(Canvas canvas) left = borderMarg in ;top = borderMargin + weekNameSize + weekNameMargin * 2 + 4; float calendarWidth =view .getMeasuredWidth() - left * 2;float calendarHeight = view .getMeasuredHeight() - top - borderMarg in ;float cellWidth = cale ndarWidth / 7;float cellHeight

39、= cale ndarHeight / 6; paint .setColor( innerGridColor );canvas.drawLine(left , top , left + view .getMeasuredWidth()-borderMargin* 2, top , paint );/畫橫線for ( int i = 1; i 6; i+) canvas.drawLine(left , top + (cellHeight) * i,left +calendarWidth, top + (cellHeight) * i,paint );/畫豎線for ( int i = 1; i

40、7; i+) canvas.drawLine(left + cellWidth * i,top , left +cellWidth * i, view .getMeasuredHeight() -borderMargin , paint );/畫日期 calculateDays();getl nsta nee();DATE;YEAR, myMon th = cale ndarYEAR,cale ndar.get(cale ndarDAY_OF_WFEKjava.util.Cale ndarcale ndar=java.util.Cale day = calendar.get(

41、calendar. int myYear = cale ndar.get(cale ndar.get(cale ndar. MONTH cale ndar.set(cale ndar.get(cale ndar.MONTH1);int week = calendar.get(calendar. int today In dex = week + day - 2;boolean today = false ;if ( currentDayIndex = -1) currentDayIndex = todayIndex;boolean flag = false ;getRecordDays();f

42、or ( int i = 0; i 20) currentMonth +; if ( currentMonth = 12) currentMonth = 0; currentYear +;view .invalidate();/ 上月 else currentMonth -;if ( currentMonth = -1) currentMonth = 11; currentYear -; view .invalidate(); currentDay = Integer. parseInt currentDay1 = currentDay ; cellX = -1; cellY = -1; br

43、eak ; else flag = true ;Bitmap bitmap = BitmapFactory.activity .getResources(),Rect src = new Rect();src. left = 0;src. top = 0;src. right = bitmap.getWidth(); src. bottom = bitmap.getHeight(); canvas.drawBitmap(bitmap, src, dst, paint .setColor( currentDayColor currentCol = col;currentRow = row;cur

44、rentDay = Integer. parseInt currentDay1 = currentDay ; updateMsg(today);decodeResource (R.drawable. day);paint ););(text);paint .setTextSize( currentDaySize ); canvas.drawText(myText, textLeft, textTop, paint );7、CalendarView 類用來處理日歷的點擊和觸摸事件,然后通過 draw 方法更新 日歷。代碼如下:public class CalendarView extends V

45、iew public Calendar ce;Overrideprotected void onDraw(Canvas canvas) ce.draw(canvas);/ 繪制日歷內(nèi)容 public CalendarView(Activity activity) super(activity);ce = new Calendar(activity, this);/創(chuàng)建 Calendar 對象/ 觸摸事件Overridepublic boolean onTouchEvent(MotionEvent motion) ce.grid.setCellX(motion.getX();/獲得當前觸摸的橫坐

46、標ce.grid.setCellY(motion.getY();/獲得當前觸摸的縱坐標if (ce.grid.inBoundary() this.invalidate();/ 重新繪制日歷return super.onTouchEvent(motion);/ 按鍵事件Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) switch (keyCode) case KeyEvent.KEYCODE_DPAD_UP: / 向上按鍵,日期上移 ce.grid.setCurrentRow(ce.grid.getCurrentRow(

47、) - 1); break;case KeyEvent.KEYCODE_DPAD_DOWN:/ 向下按鍵,日期下移 ce.grid.setCurrentRow(ce.grid.getCurrentRow() + 1); break;case KeyEvent.KEYCODE_DPAD_LEFT:/ 向左按鍵,日期左移 ce.grid.setCurrentCol(ce.grid.getCurrentCol() - 1); break;case KeyEvent.KEYCODE_DPAD_RIGHT:/ 向右按鍵,日期右移ce.grid.setCurrentCol(ce.grid.getCurre

48、ntCol() + 1);break;return true;8、菜單選項中切換到今天,代碼如下:public boolean onMenultemClick(Menultem item) ();Cale ndar cale ndar = Cale ndar.get In sta neecale ndarView cale ndar.get(Cale ndar.ce. grid . currentYear YEAR;cale ndarView cale ndar.get(Cale ndar.cale ndarView cale ndar.get(Cale ndar.cale ndarView.

49、ce. grid . currentMonthMONTH.ce. grid . currentDay =DATE;.in validate。;return true ;9、菜單選項中指定日期,代碼如下:public boolean onMenultemClick(Menultem item) builder = new AlertDialog.Builder(activity );builder .setTitle( 指定日期”); myDateLayout = (Lin earLayout)getLayoutl nflater().i nflate(R.layout. mydate , nu

50、ll );dpSelectDate = (DatePicker) myDateLayout.fin dViewByld(R.id.dpSelectDate );tvDate = (TextView)myDateLayout .findViewByld(R.id. tvDate );tvL un arDate = (TextView)myDateLayout.fin dViewByld(R.id.tvLu narDate );dpSelectDate .init(calendarView . ce. grid . currentYearce. gridce. gridmyDateLayout )

51、;cale ndarViewcale ndarView builder .setView( builder .setPositiveButt on( builder .setNegativeButt on( builder .setlco n(R.drawable. adMyDate = builder .create(); onDateChanged( dpSelectDate.currentMonth ,.currentDay , this );確定, this );取消, null );zhidi ng );,dpSelectDate .getYear()dpSelectDate .ge

52、tMo nth().dpSelectDate .getDayOfMo nth(); adMyDate .show();return true ;10、AllRecord類主要是通過DBService類讀取日程安排,并且添加三個菜單選 項,分別是添加日程、修改日程和刪除日程。主要代碼如下:protected void onCreate(Bundle savedlnstanceState) super .onCreate(savedInstanceState);year = getlntent().getExtras().getlnt(year);month );day );month = get

53、Intent().getExtras().getInt( day = getIntent().getExtras().getInt(Cursor cursor = Grid. dbService .query( year + - + month + - + day);if ( recordArray = null ) recordArray = new ArrayList();if ( arrayAdapter = null ) arrayAdapter = new ArrayAdapter(this ,android.R.layout. simple_list_item_1 , record

54、Array );elsearrayAdapter .clear();idList .clear();while (cursor.moveToNext() arrayAdapter .add(cursor.getString(1); idList .add(cursor.getInt(0);yyyy 年M月 d 日);SimpleDateFormat sdf =new SimpleDateFormat(java.util.Calendar calendar =java.util.Calendar. getInstance (); calendar.set( year , month , day)

55、; setTitle(sdf.format(calendar.getTime(); setListAdapter( arrayAdapter ); myListActivity = null ;publicmyListActivity = thismiModifyRecord miDeleteRecord 修改/ 查看); 刪除記錄 );boolean onCreateOptionsMenu(Menu menu) miNewRecord = menu.add(0, 1, 1, 添加記錄 );= menu.add(0, 2, 2,= menu.add(0, 4, 4,miNewRecord .s

56、etOnM enuItemClickListener(newOnAddRecordMenuItemClick( this );miModifyRecord .setOnMenuItemClickListener( editRecordMenuItemCl ick );miDeleteRecord .setOnMenuItemClickListener( new OnDeleteRecordMenuItemClick( this );return true ;11、Record 類用來編輯和添加日程。同時又菜單選項,分別是完成和設(shè)置提醒 時間。主要代碼:protected void onCrea

57、te(Bundle savedInstanceState) super .onCreate(savedInstanceState); setContentView(R.layout. record );etTitle = (EditText) findViewById(R.id. etContent = (EditText) findViewById(R.id. Intent intent = getIntent();edit = intent.getBooleanExtra(ifIIeditetTitle );etContent );, false );( edit ) id = inten

58、t.getIntExtra( index = intent.getIntExtra( Cursor cursor = Grid.(cursor.moveToLast() idIIif, 0);index, -1); dbService .query( id );IIIIetTitle .setText(cursor.getString(0); etContent .setText(cursor.getString(1);shake = Boolean. parseBoolean (cursor.getString(2); ring = Boolean. parseBoolean (cursor

59、.getString(3);public boolean onMenuItemClick(MenuItem item) AlertDialog.Builder builder;builder = new AlertDialog.Builder( activity ); builder.setTitle( 設(shè)置提醒時間 );LinearLayout remindSettingLayout = (LinearLayout) getLayoutInflater().inflate(R.layout. remindsetting , null ); tpRemindTime = (TimePicker

60、) remindSettingLayout tpRemindTime );.findViewById(R.id.cbShake = (CheckBox) remindSettingLayout.findViewById(R.id.cbRing = (CheckBox) remindSettingLayout.findViewById(R.id.cbShake .setChecked( shake ); cbRing .setChecked( ring ); tpRemindTime .setIs24HourView( if ( remindTime != null ) tpRemindTime

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論