Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android camera 照相機 攝像機

Android camera 照相機 攝像機

編輯: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 卡。”

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved