除了Camera.PictureCallback之外,還有其他一些值得提及的回調(diào)方法。
● Camera.PreviewCallback:定義了onPreviewFrame(byte[] data, Camera camera) 方法,當(dāng)存在預(yù)覽幀(preview frame)時(shí)調(diào)用該方法??梢詡魅氡4娈?dāng)前圖像像素的字節(jié)數(shù)組。在Camera對象上,有3種不同的方式使用這個(gè)回調(diào):
· setPreviewCallback(Camera.PreviewCallback):使用此方法注冊一個(gè)Camera. PreviewCallback,這將確保在屏幕上顯示一個(gè)新的預(yù)覽幀時(shí)調(diào)用onPreviewFrame方法。傳遞到onPreviewFrame方法中的數(shù)據(jù)字節(jié)數(shù)組最有可能采用YUV格式。但是,Android 2.2是第一個(gè)包含了YUV格式解碼器(YuvImage)的版本;在以前的版本中,必須手動(dòng)完成解碼。
· setOneShotPreviewCallback(Camera.PreviewCallback):利用Camera對象上的這個(gè)方法注冊Camera.PreviewCallback,從而當(dāng)下一幅預(yù)覽圖像可用時(shí)調(diào)用一次onPreviewFrame。同樣,傳遞到onPreviewFrame方法的預(yù)覽圖像數(shù)據(jù)最有可能采用YUV格式。可以通過使用ImageFormat中的常量檢查Camera. getParameters(). getPreviewFormat()返回的結(jié)果來確定這一點(diǎn)。
· setPreviewCallbackWithBuffer(Camera.PreviewCallback):在Android 2.2中引入了該方法,其與setPreviewCallback的工作方式相同,但要求指定一個(gè)字節(jié)數(shù)組作為緩沖區(qū),用于預(yù)覽圖像數(shù)據(jù)。這是為了能夠更好地管理處理預(yù)覽圖像時(shí)使用的內(nèi)存。
● Camera.AutoFocusCallback:定義了onAutoFocus方法,當(dāng)完成一個(gè)自動(dòng)聚焦活動(dòng)時(shí)調(diào)用它。通過傳入此回調(diào)接口的一個(gè)實(shí)例,在調(diào)用Camera對象上的autoFocus方法時(shí)會(huì)觸發(fā)自動(dòng)聚焦。
● Camera.ErrorCallback:定義了onError方法,當(dāng)發(fā)生一個(gè)Camera錯(cuò)誤時(shí)調(diào)用它。有兩個(gè)常量可用于與傳入的錯(cuò)誤代碼進(jìn)行比較:CAMERA_ERROR_UNKNOWN和CAMERA_ERROR_SERVER_DIED。
● Camera.OnZoomChangeListener:定義了onZoomChange方法,當(dāng)正在進(jìn)行或完成“平滑縮放”(慢慢縮小或放大)時(shí)調(diào)用它。在Android 2.2 (API Level 8)中引入了這個(gè)類和方法。
Camera.ShutterCallback:定義了onShutter方法,當(dāng)捕獲圖像時(shí)立刻調(diào)用它
讓我們看一下完整的示例。下面編寫的代碼可在Android 2.2和更高版本上運(yùn)行,但是只須稍做改動(dòng),這段代碼應(yīng)該就能夠在Android 1.6和更高版本上運(yùn)行。在注釋中特別注明了要求高于1.6版本的部分。