編輯:Android開發教程
一.camera啟動
1.一個activity啟動調用流程:
onCreate()-->onStart()-->onResume()
onCreate():
1.可添加所需布局文件,畫界面。
2.開啟線程,啟動硬件攝像頭,調用CameraHolder.instance().open()得到一個android.hardwareCamera實例mCameraDevice
ensureCameraDevice()-->CameraHolder.instance().open()-->mCameraDevice.getParameters();確保攝像頭存在,並將攝像頭打開。
startPreview();開始取景預覽
3.創建 VideoPreview 的SurfaceHolder,同時注冊callback函數,當VideoPreview的長寬變化時,調用SurfaceChanged()函數
mSurfaceView = (SurfaceView) findViewById(R.id.camera_preview);
SurfaceHolder holder = mSurfaceView.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
4.mIsImageCaptureIntent是否為從短信息或聯系人編輯界面發送的intent到camera
mIsImageCaptureIntent = isImageCaptureIntent();當該函數返回true時,表示從短信息或聯系人界面跳轉到拍照界面;
為false時,表示從桌面程序正常啟動camera;要注意兩種不同情況所需的右側界面功能按鈕區有變動。
onStart():
1.mSwitcher.setSwitch(SWITCH_CAMERA)設置拍照錄像切換按鈕切換到照相模式。
onResume()
startPreview()重新開始預覽
1.當按home鍵退出程序時,會掉用stopPreview(),故再次進入時,會執行onResume()函數,在此函數中,應重新開啟預覽功能。
2.keepScreenOnAwhile()點亮屏幕,防止屏幕變黑。
2.拍照錄像切換功能
1.Switcher繼承自ImageView,在布局文件中直接布局即可
2.mSwitch為true時,滑塊在下方,顯示拍照界面;當mSwitch為false時,滑塊在上方,顯示錄像界面。
3.當點擊或觸碰拍照錄像切換按鈕時:
MotionEvent.ACTION_UP-->tryToSetSwitch()-->mListener.onSwitchChanged(this, onOff)
在camera.java中實現該接口,調用switchToVideoMode()-->MenuHelper.gotoVideoMode(this)-->startCameraActivity(),並結束當前程序。
3.updateThumbnailButton()更新功能按鈕去的到相簿按鈕
1.調用事件:
initializeFirstTime初始化時調用
initializeSecondTime()時調用
Intent.ACTION_MEDIA_SCANNER_FINISHED,掃描SD卡結束時調用
2.mThumbController.isUriValid(),當圖庫裡有圖片時,值為TRUE;當圖庫裡無圖片時,值為FALSE。
3.updateLastImage()更新到相簿按鈕上的顯示圖片。
4.mThumbController.updateDisplayIfNeeded()-->if (mUri == null) mButton.setImageDrawable(null);當圖庫無照片時,此處不顯示任何照片。
4.shutterButton拍照按鈕
1.對焦調用流程
按下屏幕上的ShutterButton 按鈕。
ShutterButton.java中的監聽線程 調用callShutterButtonFocus(),這個函數會調用接口ShutterButton.OnShutterButtonListener 的函數onShutterButtonFocus()。
Camera.java實現了接口ShutterButton.OnShutterButtonListener。故Camera.java中的函數onShutterButtonFocus()被調用。
接著的執行流程為-----> doFocus()------>autoFocus()--->mCameraDevice.autoFocus()
2.拍照調用流程
之後ShutterButton.java調用performClick(),這個函數中調用了Camera.java中的onShutterButtonClick()
接著的執行流程為 ----->dosnap()----->ImagePicture.onSnap()----->ImageCapture.initiate()---->ImageCapture.capture() 此函數執行完後,takepicture 過程完成
takePicture 完成後,surfaceChanged()將被調用將剛照下的照片顯示在屏幕上。
Camera.java中的回調接口JpegPictureCallback中的函數onPictureTaken()接著執行。這個函數先調用ImageCapture.storeImage()將jpeg圖像數據存儲在內存。
3.picture 的thumbnail顯示過程:
ImageCapture.storeImage()--->ImageCapture.setLastPictureThumb()---> mThumbController.setData(uri, lastPictureThumb);
5.布局文件
1.attach_camera_control.xml,當從短信息或聯系人界面,進入camera時,右側功能按鈕區的“確定” “重拍”及“取消”
2.camera_control.xml,camera和videocamera主界面右側的功能按鈕區的布局
3.camera.xml,camera主界面左側預覽取景區的布局
4.video_camera.xml,videocamera主界面左側預覽取景區的布局
5.on_screen_hint.xml,SD卡相關信息的輸出,如在屏幕下方提示“使用相機前請先插入 SD 卡。”
 
一.圖示android是基於linux的,和我們通常認為的windows不同。它的文件結構和linux類似,因此它的根目錄是/,然後之下是:1. mnt:掛載點目錄,sd
注1:以下這些功能都是本人以MIUI ROM為例來講述的,如果你的Android沒有類似功能,可能是版本關系。部分功能需要安裝App來實現。注2:以下所述的優/缺點,全部
在介紹數據綁定時,我們使用了系統自帶的SimpleAdapter。Android 允許自定義Adapter ,理論上可以使用任意的View (Layout)來顯示數據。下
如果不使用系統自帶的TitleBar(即Activity被設置@android:style/Theme.NoTitleBar),那就需要自己來寫進度條了,這裡封裝了一個自