版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單元七多媒體開發(fā)目錄任務(wù)二、二維碼掃描購物信息任務(wù)一、溫濕度超出預(yù)警值播發(fā)出警報(bào)任務(wù)三、安防預(yù)警提示信息震動(dòng)任務(wù)四、終端動(dòng)畫演示任務(wù)目標(biāo)【任務(wù)目標(biāo)】理解Android多媒體開發(fā)技術(shù)掌握二維碼識(shí)別技術(shù)掌握Android系統(tǒng)服務(wù)及權(quán)限的設(shè)置掌握Android動(dòng)畫實(shí)現(xiàn)與動(dòng)畫播放任務(wù)陳訴1.創(chuàng)建大棚界面,界面顯示如下圖所示2.創(chuàng)建Android火焰監(jiān)控設(shè)置界面,界面顯示如下圖所示任務(wù)學(xué)習(xí)1.1多媒體開發(fā)詳解Android系統(tǒng)能夠錄制、播放各種不同形式的本地和流式多媒體文件。Android的多媒體系統(tǒng)為Android設(shè)備多媒體的開發(fā)和應(yīng)用提供了非常好的平臺(tái)。一.Android多媒體系統(tǒng)架構(gòu)Android的多媒體框架涉及到應(yīng)用層、JAVA框架、C語言Native框架、硬件抽象層(驅(qū)動(dòng)層)等環(huán)節(jié)。下面是Android的多媒體系統(tǒng)框架層次圖。如下圖所示。任務(wù)學(xué)習(xí)從圖中可以看出,Android多媒體系統(tǒng)架構(gòu)又分為四層結(jié)構(gòu),分別是Java應(yīng)用組件層、Java應(yīng)用程序框架層、系統(tǒng)運(yùn)行庫C語言Native層以及Linux內(nèi)核驅(qū)動(dòng)層,下面按照從上到下的順序分別介紹。任務(wù)學(xué)習(xí)1.Java應(yīng)用組件層
Android平臺(tái)提供了三個(gè)不同的多媒體功能。
Camera:Android框架包含了對(duì)各種攝像機(jī)及其功能的在Android設(shè)備上的支持,它可以用戶在其應(yīng)用程序中捕獲的照片和錄像。
MediaRecorder:Android的MediaRecorder包含了Audio和video的記錄功能。
MediaPlayer:Android的MediaPlayer包含了Audio和video的播放功能。任務(wù)學(xué)習(xí)2.Java應(yīng)用程序框架層Android平臺(tái)提供了四個(gè)不同的Java組件編程接口:Camera、MediaRecorder、MediaPlayer和Surface。這四個(gè)編程接口,幾乎可以實(shí)現(xiàn)Android系統(tǒng)所有多媒體功能。
Android.Hardware.Camera:該Java類提供了對(duì)攝像機(jī)操作的編程接口。
Android.Media.MediaRecorder:該Java類提供了在Android的界面上,Audio和Video兩個(gè)應(yīng)用程序都是調(diào)用MediaRecorder實(shí)現(xiàn)的。
Android.Media.MediaPlayer:該Java類提供了在Android的界面上播放Audio和Video兩個(gè)應(yīng)用程序的編程接口。
Android.View.Surface:被screencompositor管理的rawbuffer句柄。任務(wù)學(xué)習(xí)
3.系統(tǒng)運(yùn)行庫Native層
Android系統(tǒng)運(yùn)行Native庫層主要分為Camera硬件庫、PacketVideo框架和Surface庫三部分:
Camera硬件庫:提供了操作底層Camera硬件的C語言庫。
PacketVideo框架庫:多媒體庫,基于PacketVideoOpenCore;支持多種常用的音頻、視頻格式錄制和回放,編碼格式包括MPEG4、MP3、H264、AAC、ARM。任務(wù)學(xué)習(xí)ALSAAudio:又名高級(jí)Linux聲音體系(AdvancedLinuxSoundArchitecture)。是Linux內(nèi)核中,為聲卡提供的驅(qū)動(dòng)組件,以替代原先的OSS(開放聲音系統(tǒng))。一部分的目的是支持聲卡的自動(dòng)配置,以及完美的處理系統(tǒng)中的多個(gè)聲音設(shè)備,這些目的大多都已達(dá)到。另一個(gè)聲音框架JACK使用ALSA提供低延遲的專業(yè)級(jí)音頻編輯和混音能力。Android.View.Surface:執(zhí)行多個(gè)應(yīng)用程序時(shí)候,負(fù)責(zé)管理顯示與存取操作間的互動(dòng),另外也負(fù)責(zé)2D繪圖與3D繪圖進(jìn)行顯示合成。
4.Linux內(nèi)核驅(qū)動(dòng)層該層提供了對(duì)硬件驅(qū)動(dòng)的支持,包括攝像機(jī)、硬件編解碼、音頻/視頻驅(qū)動(dòng)等。任務(wù)學(xué)習(xí)二.Android多媒體系統(tǒng)功能多媒體主要包括兩方面的內(nèi)容:音頻視頻的輸入輸出、編解碼環(huán)節(jié)。其中,輸入輸出環(huán)節(jié)由其他方面的硬件抽象層實(shí)現(xiàn),中間處理環(huán)節(jié)主要由PacketVideo實(shí)現(xiàn),可以使用硬件加速??偟膩碚f,Android的多媒體系統(tǒng)通過其開放平臺(tái),以強(qiáng)大的函數(shù)庫支持,其功能包括如下內(nèi)容:音頻播放、視頻播放、攝像功能、音頻錄制、視頻錄制。任務(wù)學(xué)習(xí)三.OpenCore簡(jiǎn)介OpenCore是Android多媒體系統(tǒng)的核心。與Android的其它程序庫相比,OpenCore是一個(gè)基于C++代碼實(shí)現(xiàn)的多媒體庫,它定義了全功能的操作系統(tǒng)移植層,各種基本的功能均被封裝成類的形式,各層次之間的接口多使用繼承等方式。任務(wù)學(xué)習(xí)它主要包含了兩大方面的內(nèi)容:PVPlayer:提供媒體播放器的功能,完成各種音頻(Audio)、視頻(Video)流的回放(Playback)功能;PVAuthor:提供媒體流記錄的功能,完成各種音頻(Audio)、視頻(Video)流的以及靜態(tài)圖像捕獲功能;PVPlayer和PVAuthor以SDK的形式提供給開發(fā)者,可以在這個(gè)SDK之上構(gòu)建多種應(yīng)用程序和服務(wù)。任務(wù)學(xué)習(xí)四.OpenMAX簡(jiǎn)介OpenMax是一個(gè)多媒體應(yīng)用程序的框架標(biāo)準(zhǔn)。其中,OpenMaxIL(集成層)技術(shù)規(guī)格定義了媒體組件接口,以便在嵌入式器件的流媒體框架中快速集成加速編解碼器。OpenMax分成三個(gè)層次,自上而下分別是,OpenMaxDL(開發(fā)層),OpenMaxIL(集成層)和OpenMaxAL(應(yīng)用層)。三個(gè)層次的內(nèi)容分別如下所示。任務(wù)學(xué)習(xí)第一層:OpenMaxDL(DevelopmentLayer,開發(fā)層)OpenMaxDL定義了一個(gè)API,它是音頻、視頻和圖像功能的集合。硅供應(yīng)商能夠在一個(gè)新的處理器上實(shí)現(xiàn)并優(yōu)化,然后編解碼供應(yīng)商使用它來編寫更廣泛的編解碼器功能。它包括音頻信號(hào)的處理功能,如FFT和filter,圖像原始處理,如顏色空間轉(zhuǎn)換、視頻原始處理,以實(shí)現(xiàn)例如MPEG-4、H.264、MP3、AAC和JPEG等編解碼器的優(yōu)化。任務(wù)學(xué)習(xí)第二層:OpenMaxIL(IntegrationLayer,集成層OpenMaxIL作為音頻、視頻和圖像編解碼器能與多媒體編解碼器交互,并以統(tǒng)一的行為支持組件(例如,資源和皮膚)。這些編解碼器或許是軟硬件的混合體,對(duì)用戶是透明的底層接口應(yīng)用于嵌入式、移動(dòng)設(shè)備。它提供了應(yīng)用程序和媒體框架,透明的。S編解碼器供應(yīng)商必須寫私有的或者封閉的接口,集成進(jìn)移動(dòng)設(shè)備。IL的主要目的是使用特征集合為編解碼器提供一個(gè)系統(tǒng)抽象,為解決多個(gè)不同媒體系統(tǒng)之間輕便性的問題。第三層:OpenMaxAL(ApplictionLayer,應(yīng)用層)OpenMaxALAPI在應(yīng)用程序和多媒體中間件之間提供了一個(gè)標(biāo)準(zhǔn)化接口,多媒體中間件提供服務(wù)以實(shí)現(xiàn)被期待的API功能。任務(wù)學(xué)習(xí)1.2播放音樂在Android平臺(tái)下,要實(shí)現(xiàn)聲音的播放是十分容易實(shí)現(xiàn)的,只要生成一個(gè)MediaPlayer對(duì)象,并調(diào)用它的相關(guān)方法,就能改變對(duì)聲音播放進(jìn)行控制。MediaPlayer對(duì)象有以下各種狀態(tài),如下圖所示。任務(wù)學(xué)習(xí)MediaPlayer對(duì)象:任務(wù)學(xué)習(xí)熟悉了MediaPlayer對(duì)象的各種狀態(tài)后以及轉(zhuǎn)換條件,就能很好的控制媒體播放。例如:播放res/raw文件夾中的歌曲十分簡(jiǎn)單,只需寫如下代碼:MediaPlayermp=MediaPlayer.create(context,R.raw.sound_file_1);mp.start();也可以指定音樂文件的位置來進(jìn)行播放,例如,在sdcard根目錄下有有一首歌曲:test.mp3。則可以這樣播放:任務(wù)學(xué)習(xí)建議在播放音樂的時(shí)候把MediaPlayer放在Service中,因?yàn)槿绻旁贏ctivity中會(huì)使得界面特別卡。而且音樂不能放到后臺(tái)里播放,一旦退出Activity,音樂就會(huì)暫停播放。任務(wù)學(xué)習(xí)可以在Activity中布局相關(guān)的界面,例如按鈕等。然后通過這個(gè)Activitiy來啟動(dòng)這個(gè)Service。要通過UI與Service交互,可以通過Intent對(duì)象傳遞消息。更復(fù)雜一些,要實(shí)現(xiàn)Service向Activity發(fā)送消息,并利用這些消息來更新UI,這可以用廣播機(jī)制,例如告訴Activity是否正在播放,播放進(jìn)度,當(dāng)前播放歌曲條目等信息。任務(wù)實(shí)現(xiàn)第一步:創(chuàng)建一個(gè)Android工程,命名為AndroidDemo7_1。第二步:在項(xiàng)目AndroidDemo7_1下建立類文件BasePort.java,實(shí)現(xiàn)對(duì)Zigbee串口進(jìn)行打開/關(guān)閉操作。第三步:在項(xiàng)目AndroidDemo7_1下建立類文件FourInput.java,實(shí)現(xiàn)輸入值的過程。第四步:在項(xiàng)目AndroidDemo7_1下建立類文件SettingActivity.java,實(shí)現(xiàn)獲取溫度值臨界值。第五步:在layout下添加一個(gè)布局文件,命名為activity_main.xml。第六步:在layout下添加一個(gè)布局文件,命名為activity_setting.xml,實(shí)現(xiàn)設(shè)置溫度值等的界面。第七步:在src目錄下修改MainActivity.java文件,實(shí)現(xiàn)溫濕度超出預(yù)警值播發(fā)出警報(bào)。目錄任務(wù)二、二維碼掃描購物信息任務(wù)一、溫濕度超出預(yù)警值播發(fā)出警報(bào)任務(wù)三、安防預(yù)警提示信息震動(dòng)任務(wù)四、終端動(dòng)畫演示任務(wù)目標(biāo)【任務(wù)目標(biāo)】掌握二維碼的相關(guān)概念掌握二維碼識(shí)別原理掌握相機(jī)API的使用任務(wù)陳訴
1.創(chuàng)建打開相機(jī)的界面,為掃描二維碼做準(zhǔn)備,如右圖所示。2.點(diǎn)擊“打開相機(jī)”后,出現(xiàn)掃描二維碼的界面等待掃描二維碼,如左圖所示。任務(wù)學(xué)習(xí)1.1二維碼簡(jiǎn)介一.二維碼概念二維碼(Two-dimensionalcode)是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向)分布的黑白相間的圖形記錄數(shù)據(jù)符號(hào)信息的方式。現(xiàn)實(shí)生活中,二維碼普遍存在我們的周圍,例如:產(chǎn)品防偽/溯源、廣告推送、網(wǎng)站鏈接、數(shù)據(jù)下載、商品交易、定位/導(dǎo)航、電子憑證、車輛管理、信息傳遞、名片交流、wifi共享等。任務(wù)學(xué)習(xí)在代碼編制上巧妙地利用構(gòu)成計(jì)算機(jī)內(nèi)部邏輯基礎(chǔ)的“0”、“1”比特流的概念,使用若干個(gè)與二進(jìn)制相對(duì)應(yīng)的幾何形體來表示文字?jǐn)?shù)值信息,通過圖象輸入設(shè)備或光電掃描設(shè)備自動(dòng)識(shí)讀以實(shí)現(xiàn)信息自動(dòng)處理。在許多種類的二維條碼中,常用的碼制有:DataMatrix,MaxiCode,Aztec,QRCode,Vericode,PDF417,Ultracode,Code49,Code16K等。每種碼制有其特定的字符集;每個(gè)字符占有一定的寬度;具有一定的校驗(yàn)功能等。同時(shí)還具有對(duì)不同行的信息自動(dòng)識(shí)別功能及處理圖形旋轉(zhuǎn)變化等特點(diǎn)。二維碼是一種比一維碼更高級(jí)的條碼格式。一維碼只能在一個(gè)方向(一般是水平方向)上表達(dá)信息,而二維碼在水平和垂直方向都可以存儲(chǔ)信息。一維碼只能由數(shù)字和字母組成,而二維碼能存儲(chǔ)漢字、數(shù)字和圖片等信息,因此二維碼的應(yīng)用領(lǐng)域要廣得多。任務(wù)學(xué)習(xí)二.常用的幾種二維條碼。任務(wù)學(xué)習(xí)二維碼可以大致分為矩陣式和行排式兩種:1.矩陣式在一個(gè)矩形空間通過黑、白像素在矩陣中的不同分布進(jìn)行編碼。在矩陣元素位置上,出現(xiàn)方點(diǎn)、圓點(diǎn)或其他形狀點(diǎn)表示二進(jìn)制“1”,不出現(xiàn)點(diǎn)表示二進(jìn)制的“0”,點(diǎn)的排列組合確定了矩陣式二維碼所代表的意義。矩陣式二維碼是建立在計(jì)算機(jī)圖像處理技術(shù)、組合編碼原理等基礎(chǔ)上的一種新型圖形符號(hào)自動(dòng)識(shí)讀處理碼制。具有代表性的矩陣式二維碼有:CodeOne、MaxiCode、QRCode、DataMatrix等。任務(wù)學(xué)習(xí)圖21*21的矩陣中,黑白的區(qū)域在QR碼規(guī)范中被指定為固定的位置,稱為尋像圖形(finderpattern)和定位圖形(timingpattern)。尋像圖形和定位圖形用來幫助解碼程序確定圖形中具體符號(hào)的坐標(biāo)。黃色的區(qū)域用來保存被編碼的數(shù)據(jù)內(nèi)容以及糾錯(cuò)信息碼。藍(lán)色的區(qū)域,用來標(biāo)識(shí)糾錯(cuò)的級(jí)別(也就是LevelL到LevelH)和所謂的"Maskpattern",這個(gè)區(qū)域被稱為“格式化信息”(formatinformation)。任務(wù)學(xué)習(xí)2.行排式行排式二維碼(又稱:堆積式二維碼或?qū)优攀蕉S碼),其編碼原理是建立在一維碼基礎(chǔ)之上,按需要堆積成二行或多行。它在編碼設(shè)計(jì)、校驗(yàn)原理、識(shí)讀方式等方面繼承了一維碼的一些特點(diǎn),識(shí)讀設(shè)備與條碼印刷與一維碼技術(shù)兼容。但由于行數(shù)的增加,需要對(duì)行進(jìn)行判定、其譯碼算法與軟件也不完全相同于一維碼。有代表性的行排式二維碼有CODE49、CODE16K、PDF417等。任務(wù)學(xué)習(xí)三.二維碼的特點(diǎn)1.高密度編碼,信息容量大:可容納多達(dá)1850個(gè)大寫字母或2710個(gè)數(shù)字或1108個(gè)字節(jié),或500多個(gè)漢字,比普通條碼信息容量約高幾十倍。2.編碼范圍廣:該條碼可以把圖片、聲音、文字、簽字、指紋等可以數(shù)字化的信息進(jìn)行編碼,用條碼表示出來;可以表示多種語言文字;可表示圖像數(shù)據(jù)。3.容錯(cuò)能力強(qiáng),具有糾錯(cuò)功能:這使得二維條碼因穿孔、污損等引起局部損壞時(shí),照樣可以正確得到識(shí)讀,損毀面積達(dá)50%仍可恢復(fù)信息。4.譯碼可靠性高:它比普通條碼譯碼錯(cuò)誤率百萬分之二要低得多,誤碼率不超過千萬分之一。任務(wù)學(xué)習(xí)5.可引入加密措施:保密性、防偽性好。6.成本低,易制作,持久耐用。7.條碼符號(hào)形狀、尺寸大小比例可變。8.二維條碼可以使用激光或CCD閱讀器識(shí)讀。任務(wù)學(xué)習(xí)1.2二維碼識(shí)別通過圖像的采集設(shè)備,我們得到含有條碼的圖像,此后主要經(jīng)過條碼定位、分割和解碼三個(gè)步驟實(shí)現(xiàn)條碼的識(shí)別(以矩陣式條碼為例)。一.條碼的定位條碼的定位是實(shí)現(xiàn)條碼識(shí)別的基礎(chǔ),在一幅圖像中如果找不到待識(shí)別的條碼,后面的工作就無法完成。任務(wù)學(xué)習(xí)條碼的定位就是找到條碼符號(hào)的圖像區(qū)域,對(duì)有明顯條碼特征的區(qū)域進(jìn)行定位。然后根據(jù)不同條碼的定位圖形結(jié)構(gòu)特征對(duì)不同的條碼符號(hào)進(jìn)行下一步的處理。實(shí)現(xiàn)條碼的定位采用以下步驟:1.利用點(diǎn)運(yùn)算的閾值理論將采集到的圖像變?yōu)槎祱D像,即對(duì)圖像進(jìn)行二值化處理。2.得到二值化圖像后,對(duì)其進(jìn)行膨脹運(yùn)算。3.對(duì)膨脹后的圖像進(jìn)行邊緣檢測(cè)得到條碼區(qū)域的輪廓。任務(wù)學(xué)習(xí)下面是經(jīng)過上述處理后得到的一系列圖像。任務(wù)學(xué)習(xí)對(duì)圖像進(jìn)行二值化處理按下式進(jìn)行:其中,f(x,y)是點(diǎn)(x,y)處像素的灰度值,T為閾值(自適應(yīng)門限)。上面的步驟2中用到了數(shù)學(xué)形態(tài)學(xué)中的膨脹變換。A用B來膨脹定義為:任務(wù)學(xué)習(xí)對(duì)二值化圖像進(jìn)行的膨脹運(yùn)算就是通過上式進(jìn)行的。找到條碼區(qū)域后,我們還要進(jìn)一步區(qū)分到底是哪種矩陣式條碼。下面圖形是幾種常見的矩陣式條碼:a.位于左上角、左下角、右上角的三個(gè)定位圖形。b.位于符號(hào)中央的三個(gè)等間距同心圓環(huán)(或稱公牛眼)定位圖形。c.位于左邊和下邊的兩條垂直的實(shí)線段。任務(wù)學(xué)習(xí)二.條碼的分割邊緣檢測(cè)后條碼區(qū)域的邊界不是很完整,所以需要進(jìn)一步的修正邊界,然后分割出一個(gè)完整的條碼區(qū)域。首先采用區(qū)域增長(zhǎng)的方法對(duì)符號(hào)進(jìn)行分割,以此修正條碼邊界。其基本思想是從符號(hào)內(nèi)的一個(gè)小區(qū)域(種子)開始,通過區(qū)域增長(zhǎng)來修正條碼邊界,把符號(hào)內(nèi)的所有點(diǎn)都包括在這個(gè)邊界內(nèi)。然后通過凸殼計(jì)算準(zhǔn)確分割出整個(gè)符號(hào)。之后區(qū)域增長(zhǎng)和凸殼計(jì)算交替進(jìn)行,通常對(duì)那些密度比較大的條碼重復(fù)兩次就足夠了,而對(duì)于那些模塊組合比較稀疏的條碼至少要重復(fù)四次。任務(wù)學(xué)習(xí)三.解碼得到一幅標(biāo)準(zhǔn)的條碼圖像后,對(duì)該符號(hào)進(jìn)行網(wǎng)格采樣,對(duì)網(wǎng)格每一個(gè)交點(diǎn)上的圖像像素取樣,并根據(jù)閾值確定是深色塊還是淺色塊。構(gòu)造一個(gè)位圖,用二進(jìn)制的“1”表示深色像素,“0”表示淺色像素,從而得到條碼的原始二進(jìn)制序列值,然后對(duì)這些數(shù)據(jù)進(jìn)行糾錯(cuò)和譯碼,最后根據(jù)條碼的邏輯編碼規(guī)則把這些原始的數(shù)據(jù)位流轉(zhuǎn)換成數(shù)碼字。任務(wù)學(xué)習(xí)1.3使用相機(jī)API一.Camera概述Android的Camera包含取景器(viewfinder)和拍攝照片的功能。Camera程序架構(gòu)主要分為客戶端和服務(wù)器兩個(gè)部分,它們建立在Android的進(jìn)程間通信Binder的結(jié)構(gòu)上。在framework/base/core/java/android/hardware/Camera.java中實(shí)現(xiàn)基本的Camera功能。在這個(gè)類中,一些方法是通過JNI的方式調(diào)用本地代碼得到,一些方法由自己實(shí)現(xiàn)。在framework/base/camera/libcameraservice/目錄下面實(shí)現(xiàn)Camera的服務(wù)部分。任務(wù)學(xué)習(xí)同時(shí),為了實(shí)現(xiàn)一個(gè)具體功能的Camera,在最底層還需要一個(gè)硬件相關(guān)的Camera庫(例如通過調(diào)用Videoforlinux驅(qū)動(dòng)程序和Jpeg編碼程序?qū)崿F(xiàn))。目前我們關(guān)注AndroidCamera提供的API,因此我們就之關(guān)注Camera.java這個(gè)類。下面我們就仔細(xì)分析這個(gè)類,抽取它所提供的API。任務(wù)學(xué)習(xí)1.3使用相機(jī)API一.Camera概述Android的Camera包含取景器(viewfinder)和拍攝照片的功能。Camera程序架構(gòu)主要分為客戶端和服務(wù)器兩個(gè)部分,它們建立在Android的進(jìn)程間通信Binder的結(jié)構(gòu)上。在framework/base/core/java/android/hardware/Camera.java中實(shí)現(xiàn)基本的Camera功能。在這個(gè)類中,一些方法是通過JNI的方式調(diào)用本地代碼得到,一些方法由自己實(shí)現(xiàn)。在framework/base/camera/libcameraservice/目錄下面實(shí)現(xiàn)Camera的服務(wù)部分。任務(wù)學(xué)習(xí)同時(shí),為了實(shí)現(xiàn)一個(gè)具體功能的Camera,在最底層還需要一個(gè)硬件相關(guān)的Camera庫(例如通過調(diào)用Videoforlinux驅(qū)動(dòng)程序和Jpeg編碼程序?qū)崿F(xiàn))。目前我們關(guān)注AndroidCamera提供的API,因此我們就之關(guān)注Camera.java這個(gè)類。下面我們就仔細(xì)分析這個(gè)類,抽取它所提供的API。任務(wù)學(xué)習(xí)二.AndroidCameraAPICamera類主要用于圖像采集設(shè)置,開始、停止預(yù)覽,抓拍圖片和檢索視頻編碼幀。Camera類相對(duì)于管理實(shí)際Camera硬件的Camera服務(wù)來說是一個(gè)客戶端類。任務(wù)學(xué)習(xí)1. 主要框架屬性類型名字功能Public接口(interface)Camera.AutoFocusCallback相機(jī)自動(dòng)調(diào)焦時(shí)進(jìn)行回調(diào)處理Camera.ErrorCallback發(fā)生錯(cuò)誤時(shí)進(jìn)行回調(diào)處理Camera.PictureCallback圖像數(shù)據(jù)從捕獲器中取走時(shí)的進(jìn)行回調(diào)處理Camera.PreviewCallback完成每一幀預(yù)覽數(shù)據(jù)的復(fù)制Camera.ShutterCallback拍攝照片后快門關(guān)閉時(shí)進(jìn)行回調(diào)處理Camera.OnZoomChangeListener縮放值發(fā)生變化時(shí)的一個(gè)回調(diào)接口類(class)Camera.Size處理圖片的大小Camera.Parameters對(duì)Cameraservice獲取的圖片的參數(shù)進(jìn)行相關(guān)處理任務(wù)學(xué)習(xí)2.主要的公共接口(1)PublicMethodspublicfinalvoidaddCallbackBuffer(byte[]callbackBuffer)來源版本:APILevel8方法功能說明:添加一個(gè)預(yù)分配的緩沖區(qū)到預(yù)覽回調(diào)緩沖區(qū)隊(duì)列中。應(yīng)用程序可以添加一個(gè)或多個(gè)緩沖區(qū)到隊(duì)列中。當(dāng)一個(gè)預(yù)覽幀到達(dá),但還有緩沖區(qū)可以用,緩沖區(qū)也會(huì)添加,但是最后會(huì)從隊(duì)列中刪除,然后預(yù)覽回調(diào)調(diào)用一個(gè)緩沖區(qū)。如果一個(gè)預(yù)覽幀到達(dá)而沒有可用的緩沖區(qū),這幀數(shù)據(jù)將會(huì)被丟棄。所以當(dāng)應(yīng)用程序處理完數(shù)據(jù)后應(yīng)該自動(dòng)添加緩沖區(qū)。任務(wù)學(xué)習(xí)2.主要的公共接口(1)PublicMethodspublicfinalvoidaddCallbackBuffer(byte[]callbackBuffer)來源版本:APILevel8方法功能說明:添加一個(gè)預(yù)分配的緩沖區(qū)到預(yù)覽回調(diào)緩沖區(qū)隊(duì)列中。應(yīng)用程序可以添加一個(gè)或多個(gè)緩沖區(qū)到隊(duì)列中。當(dāng)一個(gè)預(yù)覽幀到達(dá),但還有緩沖區(qū)可以用,緩沖區(qū)也會(huì)添加,但是最后會(huì)從隊(duì)列中刪除,然后預(yù)覽回調(diào)調(diào)用一個(gè)緩沖區(qū)。如果一個(gè)預(yù)覽幀到達(dá)而沒有可用的緩沖區(qū),這幀數(shù)據(jù)將會(huì)被丟棄。所以當(dāng)應(yīng)用程序處理完數(shù)據(jù)后應(yīng)該自動(dòng)添加緩沖區(qū)。任務(wù)學(xué)習(xí)(2)publicfinalvoidautoFocus(Camera.AutoFocusCallbackcb)來源版本:APILevel1方法功能說明:當(dāng)相機(jī)需要調(diào)焦時(shí)啟動(dòng)自動(dòng)調(diào)焦功能,并注冊(cè)一個(gè)回調(diào)函數(shù)來運(yùn)行。只有調(diào)用startPreview()開始預(yù)處理時(shí)該方法有效。(3)publicfinalvoidcancelAutoFocus()來源版本:APILevel5方法功能說明:取消自動(dòng)調(diào)焦功能。如果正在使用自動(dòng)調(diào)焦,則該方法無效。無論自動(dòng)調(diào)焦是否運(yùn)行過,調(diào)用該方法焦距將還原為默認(rèn)值。如果相機(jī)不支持自動(dòng)調(diào)焦,則是一個(gè)空操作。(4)publicCamera.ParametersgetParameters()來源版本:APILevel1方法功能說明:返回CameraService返回圖片的參數(shù)。任務(wù)學(xué)習(xí)(5)publicfinalvoidlock()來源版本:APILevel5方法功能說明:鎖定相機(jī),防止其他程序訪問。默認(rèn)情況下,相機(jī)對(duì)象是被鎖定的。如果該方法失敗會(huì)拋出RuntimeException異常。(6)publicstaticCameraopen()來源版本:APILevel1方法功能說明:返回一個(gè)相機(jī)對(duì)象。(7)publicfinalvoidreconnect()來源版本:APILevel8方法功能說明:MediaRecorder使用相機(jī)錄完像后,使用該方法可以重新建立與相機(jī)硬件的連接。連接前,相機(jī)對(duì)象必須先執(zhí)行解鎖過程。如果方法失敗拋出IOException異常。(8)publicfinalvoidrelease()來源版本:APILevel1方法功能說明:斷開并釋放相機(jī)對(duì)象資源。任務(wù)學(xué)習(xí)(9)publicfinalvoidsetDisplayOrientation(intdegrees)來源版本:APILevel8方法功能說明:設(shè)置顯示的方向。該方法會(huì)影響以后的預(yù)覽幀快照后顯示圖片。(10)publicfinalvoidsetErrorCallback(Camera.ErrorCallbackcb)來源版本:APILevel1方法功能說明:放發(fā)生錯(cuò)誤時(shí)注冊(cè)并發(fā)起一個(gè)回調(diào)函數(shù)。(11)publicfinalvoidsetOneShotPreviewCallback(Camera.PreviewCallbackcb)來源版本:APILevel3方法功能說明:安裝一個(gè)回調(diào)來檢測(cè)單個(gè)預(yù)覽幀,之后清除該回調(diào)。(12)publicvoidsetParameters(Camera.Parametersparams)來源版本:APILevel1方法功能說明:設(shè)置從CameraService獲取到的圖片的參數(shù)。任務(wù)學(xué)習(xí)(13)publicfinalvoidsetPreviewCallback(Camera.PreviewCallbackcb)來源版本:APILevel1方法功能說明:除了顯示一幀預(yù)覽的數(shù)據(jù)外,可以隨時(shí)調(diào)用該方法以便指示相機(jī)使用回調(diào)來處理每一個(gè)預(yù)覽幀。(14)publicfinalvoidsetPreviewCallbackWithBuffer(Camera.PreviewCallbackcb)來源版本:APILevel8方法功能說明:只要預(yù)覽緩沖區(qū)隊(duì)列中有緩沖區(qū)就會(huì)觸發(fā)一個(gè)回調(diào)函數(shù)。通過這個(gè)方法可以最大限度地減少預(yù)覽緩沖區(qū)的動(dòng)態(tài)分配次數(shù)。(15)publicfinalvoidsetPreviewDisplay(SurfaceHolderholder)來源版本:APILevel1方法功能說明:設(shè)置SurfaceHolder以便用于圖片預(yù)覽。如果該方法失敗,拋出IOException異常。任務(wù)學(xué)習(xí)(16)publicfinalvoidsetZoomChangeListener(Camera.OnZoomChangeListenerlistener)來源版本:APILevel8方法功能說明:平滑縮放期間,當(dāng)攝像頭驅(qū)動(dòng)程序更新縮放值的時(shí)注冊(cè)該監(jiān)聽函數(shù)。(17)publicfinalvoidstartPreview()來源版本:APILevel1方法功能說明:開始在畫面上繪制預(yù)覽幀。(18)publicfinalvoidstartSmoothZoom(intvalue)來源版本:APILevel8方法功能說明:緩慢的變換到請(qǐng)求的縮放值。如果請(qǐng)求的縮放值則拋出IllegalArgumentException異常,如果方法失敗則拋出RuntimeException異常。(19)publicfinalvoidstopPreview()來源版本:APILevel1方法功能說明:停止在畫面上畫預(yù)覽幀。任務(wù)學(xué)習(xí)(20)publicfinalvoidstopSmoothZoom()來源版本:APILevel8方法功能說明:停止平滑變焦。如果失敗則拋出RuntimeException異常。(21)publicfinalvoidtakePicture(Camera.ShutterCallbackshutter,Camera.PictureCallbackraw,Camera.PictureCallbackpostview,Camera.PictureCallbackjpeg)來源版本:APILevel5方法功能說明:異步觸發(fā)圖像采集。(22)publicfinalvoidunlock()來源版本:APILevel5方法功能說明:解鎖相機(jī),讓另一個(gè)進(jìn)程能訪問它。如果失敗則拋出RuntimeException異常。任務(wù)實(shí)現(xiàn)第一步:創(chuàng)建一個(gè)Android工程,命名為AndroidDemo7_2。第二步:在項(xiàng)目AndroidDemo7_2下建立類文件CaptureActivity.java,實(shí)現(xiàn)二維碼掃描操作。第三步:在Layout下添加布局文件,命名為main。第四步:在Layout下添加掃描二維碼的布局文件,命名為camera。第五步:修改src下的MainActivity.java實(shí)現(xiàn)顯示掃描二維碼得到的值。目錄任務(wù)二、二維碼掃描購物信息任務(wù)一、溫濕度超出預(yù)警值播發(fā)出警報(bào)任務(wù)三、安防預(yù)警提示信息震動(dòng)任務(wù)四、終端動(dòng)畫演示任務(wù)目標(biāo)與陳訴【任務(wù)目標(biāo)】掌握Android系統(tǒng)服務(wù)握Android權(quán)限的使用【任務(wù)陳述】Android端界面如下,當(dāng)有火情時(shí),手機(jī)就震動(dòng)提醒,如下圖所示。任務(wù)學(xué)習(xí)【任務(wù)學(xué)習(xí)】1.1 系統(tǒng)服務(wù)簡(jiǎn)介通常在Android手機(jī)中,有很多的內(nèi)置軟件來完成系統(tǒng)的基本功能,例如,當(dāng)手機(jī)接到來電時(shí),會(huì)顯示對(duì)方的電話號(hào);也可以根據(jù)周圍的環(huán)境將手機(jī)設(shè)置成震動(dòng)或靜音;還可以獲得當(dāng)前所有的位置信息等等。那怎樣才能把這些功能加到手機(jī)應(yīng)用中呢?答案就是"系統(tǒng)服務(wù)"。在Android系統(tǒng)中提供了很多這種服務(wù),通過這些服務(wù),可以簡(jiǎn)化更加有效地管理Android系統(tǒng)。任務(wù)學(xué)習(xí)一、系統(tǒng)服務(wù)簡(jiǎn)介
Android系統(tǒng)提供的系統(tǒng)服務(wù)接口,如下表所示:服務(wù)名稱
返回的對(duì)象
服務(wù)說明WINDOW_SERVICE
WindowManager
管理打開的窗口程序LAYOUT_INFLATER_SERVICE
LayoutInflater
取得xml里定義的viewACTIVITY_SERVICE
ActivityManager
管理應(yīng)用程序的系統(tǒng)狀態(tài)POWER_SERVICE
PowerManger
電源的服務(wù)ALARM_SERVICE
AlarmManager
鬧鐘的服務(wù)NOTIFICATION_SERVICE
NotificationManager
狀態(tài)欄的服務(wù)KEYGUARD_SERVICE
KeyguardManager
鍵盤鎖的服務(wù)LOCATION_SERVICE
LocationManager
位置的服務(wù),如GPSSEARCH_SERVICE
SearchManager
搜索的服務(wù)VIBRATOR_SERVICE
Vibrator
手機(jī)震動(dòng)的服務(wù)CONNECTIVITY_SERVICE
Connectivity
網(wǎng)絡(luò)連接的服務(wù)WIFI_SERVICE
WifiManager
Wi-Fi服務(wù)TELEPHONY_SERVICE
TeleponyManager
電話服務(wù)INPUT_METHOD_SERVICE
InputMethodManager
輸入法服務(wù)UI_MODE_SERVICE
UiModeService
人機(jī)界面模式服務(wù)DOWNLOAD_SERVICE
DownloadService
網(wǎng)絡(luò)下載服務(wù)任務(wù)學(xué)習(xí)二、獲得系統(tǒng)服務(wù)系統(tǒng)服務(wù)實(shí)際上可以看作是一個(gè)對(duì)象,通過Activity類的getSystemService方法可以獲得指定的對(duì)象(系統(tǒng)服務(wù))。getSystemService方法只有一個(gè)String類型的參數(shù),表示系統(tǒng)服務(wù)的ID,這個(gè)ID在整個(gè)Android系統(tǒng)中是唯一的。例如,audio表示音頻服務(wù),window表示窗口服務(wù),notification表示通知服務(wù)。任務(wù)學(xué)習(xí)為了便于記憶和管理,AndroidSDK在android.content.Context類中定義了這些ID,下面的代碼是一些ID的定義。name返回的對(duì)象
說明WINDOW_SERVICEWindowManager管理打開的窗口程序LAYOUT_INFLATER_SERVICELayoutInflater取得xml里定義的viewACTIVITY_SERVICEActivityManager
管理應(yīng)用程序的系統(tǒng)狀態(tài)POWER_SERVICEPowerManger電源的服務(wù)ALARM_SERVICEAlarmManager鬧鐘的服務(wù)NOTIFICATION_SERVICENotificationManager狀態(tài)欄的服務(wù)KEYGUARD_SERVICEKeyguardManager鍵盤鎖的服務(wù)LOCATION_SERVICELocationManager位置的服務(wù),如GPSSEARCH_SERVICESearchManager搜索的服務(wù)VIBRATOR_SERVICEVibrator手機(jī)震動(dòng)的服務(wù)CONNECTIVITY_SERVICEConnectivity網(wǎng)絡(luò)連接的服務(wù)WIFI_SERVICEWifiManagerWi-Fi服務(wù)TELEPHONY_SERVICETeleponyManager電話服務(wù)任務(wù)學(xué)習(xí)1.2 權(quán)限簡(jiǎn)介開發(fā)Android經(jīng)常調(diào)用一些函數(shù)檢查了幾遍都沒有問題,卻程序一直有錯(cuò),這時(shí)候就要想想是否已經(jīng)在androidmanifest.xml中聲明了相關(guān)的權(quán)限。因?yàn)闉榱俗屜到y(tǒng)更加安全,當(dāng)程序執(zhí)行一些安全敏感項(xiàng)時(shí)就必須調(diào)用相關(guān)權(quán)限。任務(wù)學(xué)習(xí)常用權(quán)限如下表所示。讀寫存儲(chǔ)卡
裝載和卸載文件系統(tǒng)android.permission.WRITE_EXTERNAL_STORAGEandroid.permission.READ_EXTERNAL_STORAGEandroid.permission.MOUNT_UNMOUNT_FILESYSTEMS網(wǎng)絡(luò)連接android.permission.INTERNETandroid.permission.ACCESS_NETWORK_STATEandroid.permission.ACCESS_WIFI_STATEandroid.permission.CHANGE_WIFI_STATE開機(jī)啟動(dòng)android.permission.RECEIVE_BOOT_COMPLETED精準(zhǔn)的GPS位置基于網(wǎng)絡(luò)的粗略的位置獲取模擬定位信息(調(diào)試)android.permission.ACCESS_FINE_LOCATIONandroid.permission.ACCESS_COARSE_LOCATIONandroid.permission.ACCESS_MOCK_LOCATION短信android.permission.BROADCAST_SMSandroid.permission.READ_SMSandroid.permission.SEND_SMSandroid.permission.RECEIVE_SMSandroid.permission.WRITE_SMS任務(wù)學(xué)習(xí)常用權(quán)限如下表所示。撥打電話允許程序撥打電話(任何電話)android.permission.CALL_PHONEandroid.permission.CALL_PRIVILEGED讀取聯(lián)系人讀取通話記錄android.permission.READ_CONTACTSandroid.permission.WRITE_CONTACTSandroid.permission.READ_CALL_LOGandroid.permission.WRITE_CALL_LOG安裝/卸載快捷方式com.android.launcher.permission.INSTALL_SHORTCUTcom.android.launcher.permission.UNINSTALL_SHORTCUT錄音修改聲音設(shè)置android.permission.RECORD_AUDIOandroid.permission.MODIFY_AUDIO_SETTINGS振動(dòng)android.permission.VIBRATE默認(rèn)android.permission.BAIDU_LOCATION_SERVICE讀寫手機(jī)狀態(tài)和身份android.permission.READ_PHONE_STATE裝載和卸載文件系統(tǒng)android.permission.MOUNT_UNMOUNT_FILESYSTEMS任務(wù)學(xué)習(xí)常用權(quán)限如下表所示。查閱敏感日志數(shù)據(jù)android.permission.READ_LOGS發(fā)送持久廣播android.permission.BROADCAST_STICKY修改全局系統(tǒng)設(shè)置android.permission.WRITE_SETTINGS喚醒a(bǔ)ndroid.permission.WAKE_LOCK關(guān)閉程序android.permission.RESTART_PACKAGESandroid.permission.KILL_BACKGROUND_PROCESSESandroid瀏覽器插件開發(fā)android.webkit.permission.PLUGIN禁用鍵盤鎖android.permission.DISABLE_KEYGUARD寫入瀏覽器的收藏夾和歷史記錄讀com.android.browser.permission.WRITE_HISTORY_BOOKMARKScom.android.browser.permission.READ_HISTORY_BOOKMARKS調(diào)用Cameraandroid.permission.CAMERA任務(wù)實(shí)現(xiàn)第一步:創(chuàng)建一個(gè)Android工程,命名為AndroidDemo7_3。第二步:在項(xiàng)目AndroidDemo7_3下建立類文件ADAM4150.java,實(shí)現(xiàn)讀取傳感器的值。第三步:在src目錄下生成BasePort.java類文件,實(shí)現(xiàn)打開/關(guān)閉串口的功能。第四步:在layout下添加一個(gè)布局文件,命名為activity_main.xml。第五步:在src目錄下修改MainActivity.java文件,實(shí)現(xiàn)當(dāng)火焰?zhèn)鞲衅鞅O(jiān)測(cè)到火情時(shí)手機(jī)震動(dòng)提醒。目錄任務(wù)二、二維碼掃描購物信息任務(wù)一、溫濕度超出預(yù)警值播發(fā)出警報(bào)任務(wù)三、安防預(yù)警提示信息震動(dòng)任務(wù)四、終端動(dòng)畫演示任務(wù)目標(biāo)與陳訴【任務(wù)目標(biāo)】掌握Android下Tween動(dòng)畫的實(shí)現(xiàn)掌握Android下Frame動(dòng)畫的實(shí)現(xiàn)掌握Android下如何播放GIF動(dòng)畫文件【任務(wù)陳述】使用Android動(dòng)畫技術(shù)實(shí)現(xiàn)讀取傳感器值的時(shí)候,讓門開啟和風(fēng)扇轉(zhuǎn)動(dòng)的效果,如下圖:任務(wù)學(xué)習(xí)【任務(wù)學(xué)習(xí)】Android平臺(tái)提供了一套完整的動(dòng)畫框架,使得應(yīng)用開發(fā)者可以用它來實(shí)現(xiàn)各種動(dòng)畫效果。比如:按扭的彈入彈出效果、Activity的切換動(dòng)畫、文本圖片的旋轉(zhuǎn)效果等。Android平臺(tái)的動(dòng)畫分三個(gè)部分,在Android3.0版本以前支持兩種動(dòng)畫,分別為補(bǔ)間動(dòng)畫(TweenAnimation)和逐幀動(dòng)畫(FrameAnimation);在Android3.0版本中新加入的動(dòng)畫叫屬性動(dòng)畫(PropertyAnimation)。根據(jù)我們具體的要求我們只介紹前兩種動(dòng)畫。任務(wù)學(xué)習(xí)1.1Tween動(dòng)畫Tween動(dòng)畫是通過對(duì)場(chǎng)景中的對(duì)象不斷做圖像變換(平移、縮放、旋轉(zhuǎn)、改變透明度)產(chǎn)生動(dòng)畫效果,但是該動(dòng)畫只能應(yīng)用于View對(duì)象,并且只支持一部分屬性,如支持縮放旋轉(zhuǎn)而不支持背景顏色的改變。該動(dòng)畫實(shí)現(xiàn)方式其實(shí)就是預(yù)先定義一組指令,這些指令指定了圖形變換的類型、觸發(fā)時(shí)間、持續(xù)時(shí)間。這些指令可以是以XML文件方式定義,也可以是以源代碼方式定義。程序沿著時(shí)間線執(zhí)行這些指令就可以實(shí)現(xiàn)動(dòng)畫效果。任務(wù)學(xué)習(xí)1.使用XML來定義Tween動(dòng)畫動(dòng)畫的XML文件在工程中res/anim目錄,這個(gè)文件必須包含一個(gè)根元素,可以使<alpha><scale><translate><rotate>插值元素或者是把上面的元素都放入<set>元素組中,默認(rèn)情況下,所有的動(dòng)畫指令都是同時(shí)發(fā)生的,為了讓他們按序列發(fā)生,需要設(shè)置一個(gè)特殊的屬性startOffset。動(dòng)畫的指令定義了你想要發(fā)生什么樣的轉(zhuǎn)換,當(dāng)他們發(fā)生了,應(yīng)該執(zhí)行多長(zhǎng)時(shí)間,轉(zhuǎn)換可以是連續(xù)的也可以是同時(shí)的。例如,你讓文本內(nèi)容從左邊移動(dòng)到右邊,然后旋轉(zhuǎn)180度,或者在移動(dòng)的過程中同時(shí)旋轉(zhuǎn),每個(gè)轉(zhuǎn)換需要設(shè)置一些特殊的參數(shù)(開始和結(jié)束的大小尺寸的大小變化,開始和結(jié)束的旋轉(zhuǎn)角度等等,也可以設(shè)置些基本的參數(shù)(例如,開始時(shí)間與周期),如果讓幾個(gè)轉(zhuǎn)換同時(shí)發(fā)生,可以給它們?cè)O(shè)置相同的開始時(shí)間,如果按序列的話,計(jì)算開始時(shí)間加上其周期。任務(wù)學(xué)習(xí)在XML文件中加入如下XML動(dòng)畫代碼:<?xmlversion=”1.0”encoding=”utf-8”?><setxmlns:android=”/apk/res/android”><alpha/><scale/><translate/><rotate/></set>任務(wù)學(xué)習(xí)2.在代碼中定義動(dòng)畫:核心代碼如下:privateAnimationmyAnimation_Alpha;privateAnimationmyAnimation_Scale;privateAnimationmyAnimation_Translate;privateAnimationmyAnimation_Rotate;//根據(jù)各自的構(gòu)造方法來初始化一個(gè)實(shí)例對(duì)象myAnimation_Alpha=newAlphaAnimation(0.1f,1.0f);myAnimation_Scale=newScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);myAnimation_Translate=newTranslateAnimation(30.0f,-80.0f,30.0f,300.0f);myAnimation_Rotate=newRotateAnimation(0.0f,+350.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);任務(wù)學(xué)習(xí)3.實(shí)現(xiàn)原理Tween動(dòng)畫是建立在View的級(jí)別上的,在View類中有一個(gè)接口startAnimation來使動(dòng)畫開始,startAnimation函數(shù)會(huì)將一個(gè)Animation類別的參數(shù)傳給View,這個(gè)Animation是用來指定我們使用的是哪種動(dòng)畫,現(xiàn)有的動(dòng)畫有平移,縮放,旋轉(zhuǎn)以及alpha變換等。如果需要更復(fù)雜的效果,可以將這些動(dòng)畫組合起來。要了解Android動(dòng)畫是如何畫出來的,首先要了解Android的View是如何組織在一起,以及他們是如何畫自己的內(nèi)容的。每一個(gè)窗口就是一棵View樹,繪制整個(gè)窗口需要按順序執(zhí)行以下幾個(gè)步驟:任務(wù)學(xué)習(xí)(1)繪制背景;(2)如果需要,保存畫布(canvas)的層為淡入或淡出做準(zhǔn)備;(3)繪制View本身的內(nèi)容,通過調(diào)用View.onDraw(canvas)函數(shù)實(shí)現(xiàn),通過這個(gè)我們應(yīng)該能看出來onDraw函數(shù)重載的重要性,onDraw函數(shù)中繪制線條/圓/文字等功能會(huì)調(diào)用Canvas中對(duì)應(yīng)的功能。下面我們會(huì)drawLine函數(shù)為例進(jìn)行說明;(4)繪制自己的孩子(通常也是一個(gè)view系統(tǒng)),通過dispatchDraw(canvas)實(shí)現(xiàn),參看ViewGroup.Java中的代碼可知,dispatchDraw->drawChild->child.draw(canvas)這樣的調(diào)用過程被用來保證每個(gè)子View的draw函數(shù)都被調(diào)用,通過這種遞歸調(diào)用從而讓整個(gè)View樹中的所有View的內(nèi)容都得到繪制。在調(diào)用每個(gè)子View的draw函數(shù)之前,需要繪制的View的繪制位置是在Canvas通過translate函數(shù)調(diào)用來進(jìn)行切換的,窗口中的所有View是共用一個(gè)Canvas對(duì)象任務(wù)學(xué)習(xí)(5)如果需要,繪制淡入淡出相關(guān)的內(nèi)容并恢復(fù)保存的畫布所在的層(layer)(6)繪制修飾的內(nèi)容(例如滾動(dòng)條),這個(gè)可知要實(shí)現(xiàn)滾動(dòng)條效果并不需要ScrollView,可以在View中完成的。當(dāng)一個(gè)ChildView要重畫時(shí),它會(huì)調(diào)用其成員函數(shù)invalidate()函數(shù)將通知其ParentView這個(gè)ChildView要重畫,這個(gè)過程一直向上遍歷到ViewRoot,當(dāng)ViewRoot收到這個(gè)通知后就會(huì)調(diào)用上面提到的ViewRoot中的draw函數(shù)從而完成繪制。View::onDraw()有一個(gè)畫布參數(shù)Canvas,畫布顧名思義就是畫東西的地方,Android會(huì)為每一個(gè)View設(shè)置好畫布,View就可以調(diào)用Canvas的方法,比如:drawText,drawBitmap,drawPath等等去畫內(nèi)容。每一個(gè)ChildView的畫布是由其ParentView設(shè)置的,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 石料采購合同協(xié)議
- 供應(yīng)鏈金融居間合同
- 2025年度個(gè)人租賃住宅合同(含社區(qū)花園使用權(quán))3篇
- 限期借款合同
- 網(wǎng)線采購合同
- 智能物流倉儲(chǔ)管理系統(tǒng)設(shè)計(jì)開發(fā)合同
- 農(nóng)業(yè)農(nóng)產(chǎn)品買賣合同
- 特定行業(yè)技術(shù)培訓(xùn)服務(wù)合同書
- 科研技術(shù)合同協(xié)議
- 電子信息技術(shù)咨詢服務(wù)合同
- 天津市五區(qū)縣重點(diǎn)校2024-2025學(xué)年高一上學(xué)期1月期末聯(lián)考試題 化學(xué) 含答案
- 吉林省吉林市普通中學(xué)2024-2025學(xué)年高三上學(xué)期二模試題 生物 含答案
- 2025年湖南省通信產(chǎn)業(yè)服務(wù)限公司春季校園招聘76人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《電影之創(chuàng)戰(zhàn)紀(jì)》課件
- 社區(qū)醫(yī)療抗菌藥物分級(jí)管理方案
- 開題報(bào)告-鑄牢中華民族共同體意識(shí)的學(xué)校教育研究
- 《醫(yī)院標(biāo)識(shí)牌規(guī)劃設(shè)計(jì)方案》
- 公司2025年會(huì)暨員工團(tuán)隊(duì)頒獎(jiǎng)盛典攜手同行共創(chuàng)未來模板
- 新滬科版八年級(jí)物理第三章光的世界各個(gè)章節(jié)測(cè)試試題(含答案)
- 非遺國(guó)粹川劇變臉的傳統(tǒng)文化知識(shí)了解原創(chuàng)模板
- 夜市運(yùn)營(yíng)投標(biāo)方案(技術(shù)方案)
評(píng)論
0/150
提交評(píng)論