項(xiàng)目中使用到了自定義camera,并實(shí)現(xiàn)手勢(shì)縮放和自動(dòng)對(duì)焦。
一蓬戚、首先來(lái)看看官方文檔
goole給出了10個(gè)步驟,那么我們按照這十個(gè)步驟來(lái)實(shí)現(xiàn)自定義camera宾抓。
二子漩、自定義camera要使用到的類(lèi)
Camera ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 相機(jī)類(lèi),詳情參照官方文檔
Camera.Parameters ? ? ? ? ? ? Camera的參數(shù)設(shè)置石洗,如:對(duì)焦幢泼、閃光燈
SurfaceView ? ? ? ? ? ? ? ? ? ? ? ? 預(yù)覽Camera鏡頭的取景
SurfaceHolder ? ? ? ? ? ? ? ? ? ? ?surface的抽象接口,來(lái)控制surface的尺寸和格式
SurfaceHolder.Callback ? ? ?控制該接口的客戶端能夠接收surface改變的信息
三讲衫、demo實(shí)現(xiàn)
1.布局文件
FrameLayout來(lái)填充Surface
一個(gè)前缕棵、后置轉(zhuǎn)換ImageView和一個(gè)拍照ImageView?
2.Surface類(lèi)的實(shí)現(xiàn)
創(chuàng)建一個(gè)Activity繼承SurfaceView并實(shí)現(xiàn)SurfaceHolder.Callback接口
?(1)構(gòu)造方法
?(2)三個(gè)Override的方法
?(3)相機(jī)參數(shù)初始化
?(4)釋放相機(jī)
?(5)重置相機(jī)
?(6)方向控制
3.CameraActivity的實(shí)現(xiàn)
(1)將CameraPreview填充到FrameLayout
context= CameraActivity.this;
context一定要這樣獲取,使用
Context context;
方式獲取會(huì)出錯(cuò)
?(2)初始化相機(jī)
?(3)對(duì)焦代碼較多涉兽,就不截圖了挥吵,直接上傳文件,源文件可以直接使用到自定義Camera中
需要注意的是花椭,實(shí)現(xiàn)縮放,必須給cameraPreview設(shè)置兩個(gè)監(jiān)聽(tīng)事件房午,一個(gè)是setOnClickListener矿辽,一個(gè)是setOnTouchListener
?(4)demo已經(jīng)提交到github上了
CustomCamera?點(diǎn)擊下載demo