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