正文

擴(kuò)展定制的Camera應(yīng)用程序(1)

Android多媒體開(kāi)發(fā)高級(jí)編程 作者:(美)艾佛瑞


Android上內(nèi)置的Camera應(yīng)用程序缺少幾個(gè)基本功能,其中之一是在少量時(shí)間(例如10秒或30秒)之后照相的能力。此功能通常對(duì)于安裝了三角架的攝像頭非常有用。它能完成的一件事就是攝影師能夠建立一個(gè)場(chǎng)景,設(shè)置計(jì)時(shí)器,然后跑進(jìn)該場(chǎng)景。

雖然不會(huì)經(jīng)常這樣使用移動(dòng)電話,但是它在某些情況下將會(huì)非常有用。例如,當(dāng)希望給自己和在一起的某個(gè)人照相時(shí),我們會(huì)喜歡這個(gè)功能。目前,當(dāng)嘗試這么做時(shí)會(huì)遇到困難,此時(shí)我們看不到觸摸屏界面,因?yàn)樗c我們的臉部有一段距離。我們會(huì)在屏幕上到處亂點(diǎn),希望能夠按到拍照按鈕。

2.2.1  構(gòu)建基于定時(shí)器的Camera應(yīng)用程序

為了糾正剛才所描述的情況,可以在照相時(shí)添加一個(gè)時(shí)間延遲。接下來(lái)更新SnapShot示例,使得在按下按鈕10秒鐘后開(kāi)始照相。

為了實(shí)現(xiàn)這個(gè)功能,需要使用一個(gè)類似java.util.Timer的對(duì)象。但是,在Android中使用Timer對(duì)象會(huì)導(dǎo)致一些問(wèn)題,因?yàn)樗肓艘粋€(gè)單獨(dú)的線程。為了使得單獨(dú)的線程與UI交互,需要使用一個(gè)Handler對(duì)象在主線程中觸發(fā)一個(gè)動(dòng)作。

使用Handler對(duì)象的另一個(gè)用途是安排在將來(lái)發(fā)生的操作。Handler對(duì)象所擁有的功能使得我們不必使用Timer對(duì)象。

為了創(chuàng)建在將來(lái)執(zhí)行某些動(dòng)作的Handler對(duì)象,只須構(gòu)建一個(gè)通用的Handler對(duì)象:

Handler timerHandler = new Handler();

然后,必須創(chuàng)建一個(gè)Runnable對(duì)象,在其run方法中包含后面將要發(fā)生的動(dòng)作。在當(dāng)前情況下,我們希望這個(gè)動(dòng)作在10秒鐘之后發(fā)生,觸發(fā)照相操作:

Runnable timerTask = new Runnable() {

     public void run() {

          camera.takePicture(null,null,null,TimerSnapShot.this);

     } 

};

現(xiàn)在當(dāng)單擊一個(gè)按鈕時(shí),只需要這樣安排操作:

timerHandler.postDelayed(timerTask, 10000);

這將通知timerHandler在10秒鐘(10000毫秒)之后調(diào)用timerTask方法。

下面的示例將創(chuàng)建一個(gè)Handler對(duì)象,并使它每秒鐘調(diào)用一個(gè)方法。通過(guò)采用這種方式,可以在屏幕上為用戶提供倒計(jì)時(shí)。

 


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)