现在的位置: 首页 > 综合 > 正文

com.android.camera.Camera

2013年08月14日 ⁄ 综合 ⁄ 共 2220字 ⁄ 字号 评论关闭

1.在onCreate方法中:

1.1调用getPreferredCameraId()方法,在此方法中new了ComboPreferences对象,此对象用于管理程序中生成的以包命名的配置文件,获取此对象后初始化了一些配置。接着从配置文件中读取照相机id  mCameraId, 接着调用Util.getCameraFacingIntentExtras(this)方法获取通过”android.intent.extras.CAMERA_FACING“得到Intent中传过来的id,如果id合法,则覆盖之前的 mCameraId。

1.2获取配置文件中的聚焦模式存于defaultFocusModes数组中。初始化mFocusManager,用于管理聚焦模式。使用子线程mCameraOpenThread启动照相机。判断是否快速拍照请求boolean值存于mIsImageCaptureIntent中(第三方应用请求)。

1.3初始化一些View对象。构建新的配置文件,把当前照相机id存于mPreferences所新建的配置文件中,配置文件末尾数字代表着是否前后摄像头。获取摄像头个数mNumberOfCameras。调用resetExposureCompensation()方法把配置文件中的曝光值设为0。调用Util.enterLightsOutMode(getWindow())隐藏标题栏,配置文件中设置了全屏。

1.4初始化SurfaceView,获取holder并设置从外部获取像素,增加监听。等待子线程mCameraOpenThread结束后合并线程,并判断开启相机是否有异常,若有,则给提示并点击确定后结束Activity。

1.5启动预览线程mCameraPreviewThread,在此线程调用了initializeCapabilities()方法,在此方法中:获取照相机默认参数存于mInitialParams中,使用此参数调用mFocusManager的initializeParameters(mInitialParams)方法,在initializeParameters方法中判断了是否支持自动聚焦、是否支持白平衡或者曝光。获取了mAeLockSupported、mAwbLockSupported、mMeteringAreaSupported、mFocusAreaSupported的布尔值。

1.5.1调用了startPreview()方法设置参数并开始预览,调用mFocusManager.resetTouchFocus()方法,设置相机出错监听setErrorCallback,调用setPreviewDisplay(mSurfaceHolder)方法设置Camera数据与SurfaceView的关联。调用setDisplayOrientation()方法设置预览角度,在此方法中获取mDisplayRotation,根据此值获取mDisplayOrientation。

1.5.2调用setCameraParameters(UPDATE_PARAM_ALL)方法获取所有配置文件中的参数,并设置。在setCameraParameters方法中调用了updateCameraParametersInitialize()方法,此方法中获取Camera所有支持的预览帧,并设置其中最大值mParameters.setPreviewFrameRate(max),并设置了一个API 14才支持的参数“video-stabilization”。调用updateCameraParametersZoom()方法设置焦距,初始时为0。

1.5.3调用updateCameraParametersPreference()方法设置从mFocusManager与从配置文件中获取的参数设置。设置了聚焦区域、设置存于配置文件中的图片尺寸,如无,则获取所有支持尺寸与配置文件中定义的所有尺寸对比,把第一个符合的设置。获取预览界面最外层ViewGroup类对象mPreviewPanel,此对象用于决定SharePopup中ImageView的宽高。获取PreviewFrameLayout对象,用于决定预览画面的比例。....... 基本上照相机设置全在这个方法中完成。

1.5.4调用完setCameraParameters(UPDATE_PARAM_ALL)方法后唤醒预览线程,接着启动预览。调用setCameraState(IDLE)方法设置左下图标与设置图标Enable,聚焦时是不可选的。

1.6 判断是否第三方应用调用,如果不是,显示ModePicker(左下侧图标)对象。调用了initializeIndicatorControl()方法来决定设置部分界面,在此方法中数组SETTING_KEYS决定了横向显示的设置图标(闪光灯、白平衡...),OTHER_SETTING_KEYS决定了弹出来的设置界面的Item。所有设置都定义在camera_preferences.xml文件中,故而此方法也调用了loadCameraPreferences()方法得到mPreferenceGroup。调用了updateSceneModeUI()方法设置闪光灯、白平衡、聚焦模式...是否可被设置(变灰),null代表可设置,条件是情景模式是否为自动。

抱歉!评论已关闭.