CustomCamera
android自定義相機(jī)
功能描述:
- 主要可自定義相機(jī)的各類(lèi)按鈕布局
- 相機(jī)拍照縮放功能
- 相機(jī)的寬高設(shè)置
- 前后攝像頭拍照設(shè)置
使用方法
一、添加依賴
Step 1. Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.jianjin33:CustomCamera:v1.0.3'
}
二炫加、清單文件中配置權(quán)限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera" />
三碳褒、初始化
可以在自定義Application或開(kāi)啟相機(jī)界面之前的適當(dāng)位置,添加一下初始化代碼:
CustomCameraAgent.init(this);
還可以配置一些屬性:
CustomCameraAgent.openLog();
打開(kāi)日志
CustomCameraAgent.setCameraWidthAndHeight();
設(shè)置相機(jī)預(yù)覽界面的寬高和照片的寬高
CustomCameraAgent.setPicFileName();
設(shè)置自定義相機(jī)照片存儲(chǔ)路徑叠纷,默認(rèn)在photos文件夾下
四、Activity
- 布局文件中使用CameraContainer控件;
- onCreate方法中初始化CameraManager济舆,并綁定開(kāi)關(guān)燈View和切換前后攝像頭view,第三第四個(gè)參數(shù)為燈狀態(tài)和前后攝像頭時(shí)的文字提示莺债,可為null滋觉。
mCameraManager = CameraManager.getInstance(this);
mCameraManager.bindOptionMenuView(mCameraIvLight, mCameraTvSwitch, flashHint, null);
mCameraContainer.bindActivity(this);
- 當(dāng)相機(jī)不可見(jiàn)時(shí)签夭,及時(shí)釋放相機(jī)的資源及注銷(xiāo)一些傳感器的監(jiān)聽(tīng),調(diào)用CameraContainer.onStop(),恢復(fù)界面時(shí)調(diào)用CameraContainer.onStart();
@Override
protected void onResume() {
super.onResume();
if (mCameraContainer != null) {
mCameraContainer.onStart();
}
}
@Override
protected void onPause() {
super.onPause();
if (mCameraContainer != null) {
mCameraContainer.onStop();
}
}
- 界面銷(xiāo)毀時(shí)釋放相機(jī)資源
@Override
protected void onDestroy() {
super.onDestroy();
mCameraManager.unbindView();
if (mCameraContainer != null) {
mCameraContainer.releaseCamera();
}
}
- 拍照椎侠、切換攝像頭和開(kāi)關(guān)閃光燈等功能:
mCameraContainer.switchFlashMode();
開(kāi)啟關(guān)閉閃光燈第租。這里注意只有當(dāng)光線較暗的情況下才會(huì)顯示開(kāi)燈按鈕;
mCameraContainer.switchCamera();
切換前后相機(jī)
mCameraContainer.takePicture(ISavePicCallback);
拍照我纪,傳入存儲(chǔ)圖片完成后的回調(diào)接口ISavePicCallback
效果圖
效果圖
CustomCamera庫(kù)
image.png
不算復(fù)雜的類(lèi)庫(kù)慎宾,結(jié)構(gòu)如上圖,大致介紹一下各自功能宣羊,比較重要的類(lèi)有:
- CameraCotainer:是個(gè)ViewGroup璧诵,包含相機(jī)預(yù)覽界面、相機(jī)焦點(diǎn)顯示隱藏及焦點(diǎn)位置控制仇冯,縮放相機(jī)預(yù)覽界面進(jìn)行縮放的操作和控制之宿;
- CameraPreview:繼承SurfaceView,結(jié)合CameraManager控制相機(jī)的初始化苛坚,開(kāi)關(guān)燈比被,切換攝像頭等功能;
- FocusImageView :相機(jī)焦點(diǎn)控件泼舱;
- PreviewLightCallback:監(jiān)聽(tīng)光線是否昏暗等缀,控制是否顯示開(kāi)燈按鈕;
- CustomCameraAgent:初始化庫(kù)使用娇昙;
- SavePicHandler尺迂、UIHandler:存儲(chǔ)照片在子線程中進(jìn)行;
- SensorController:加速傳感器冒掌,根據(jù)速度大小控制是否開(kāi)始鎖定焦點(diǎn)進(jìn)行相機(jī)變焦噪裕。
- 入口為CustomCameraAgent,進(jìn)行初始化股毫,配置Application和一些參數(shù)膳音。
- 相機(jī)界面會(huì)用到CameraContainer控件,是一個(gè)FrameLayout铃诬,主要是添加了一個(gè)CameraPreview控件祭陷,兩者都實(shí)現(xiàn)了ICameraOperation接口,(是一個(gè)操作相機(jī)的接口趣席,可以看成CameraContainer是CameraPreview一種代理模式兵志,最終的實(shí)現(xiàn)都在CameraPreview中完成,高層只會(huì)調(diào)用CameraContainer的方法)