名稱 | CameraView |
---|---|
語言 | Android |
平臺 | GitHub |
作者 | natario1 |
鏈接 | 點此進入 |
日常開發(fā)工作中,我們偶爾會遇到照相或攝像的開發(fā)需求,一般我們是會直接使用系統(tǒng)的Camera類,然后基于這個自己寫一套方法,費時,效果又一般。今天小編給大家推薦一款開源的相機庫——CameraView。CameraView使拍攝的照片和視頻很容易,解決最常見的問題和需求,而且靈活性還很高,可以滿足你各種各樣的自定義開發(fā)需求。
這是一個從CameraKit Android庫fork出來的庫,最根源是從谷歌的CameraView Library庫派生出來的,但作者對其進行完全重寫。
特點:
無縫圖像和視頻采集
手勢支持(點擊對焦,雙指縮放等)
系統(tǒng)權(quán)限的處理
動態(tài)調(diào)整CameraView大小;
內(nèi)建網(wǎng)格圖
多個捕獲方法 :用CapturePicture拍攝高分辨率的圖片;用CaptureSnapshot生成快速快照用于凍結(jié)幀的預(yù)覽(類似于Snapchat、Instagram)
控制HDR,閃光燈,變焦,白平衡,曝光校正等
對圖片和視頻的元數(shù)據(jù)支持 :自動檢測定位標(biāo)記 ,用setlocation() API設(shè)置拍照的位置
CameraUtils處理Bitmaps和圖片方向
重量輕,無依賴性,支持exifinterface
系統(tǒng)要求:Android 4.0.3及以上。
使用方法:
1、在build.gradle添加依賴
dependencies {
compile 'com.otaliastudios:cameraview:1.2.0'}
2、在布局文件引入控件
<com.otaliastudios.cameraview.CameraView
android:id="@+id/camera"
android:keepScreenOn="true" //保持屏幕常亮
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
3、當(dāng)在activity或fragment使用CameraView的時候,確保CameraView的生命周期跟activity或fragment一致,保證控件正常工作
@Override
protected void onResume() {
super.onResume();
cameraView.start();
}
@Override
protected void onPause() {
super.onPause();
cameraView.stop();
}
@Override
protected void onDestroy() {
super.onDestroy();
cameraView.destroy();
}
4、拍照
camera.addCameraListener(new CameraListener() {
@Override
public void onPictureTaken(byte[] picture) {
// Create a bitmap or a file...
// CameraUtils will read EXIF orientation for you, in a worker thread.
CameraUtils.decodeBitmap(picture, ...);
}
});
camera.capturePicture();
5、攝像
camera.addCameraListener(new CameraListener() {
@Override
public void onVideoTaken(File video) {
// The File is the same you passed before.
// Now it holds a MP4 video.
}
});
// Select output file. Make sure you have write permissions.
File file = ...;
// Record a 2500 ms video:
camera.startRecordingVideo(file, 2500);
// Full version
camera.startRecordingVideo(file);
camera.postDelayed(new Runnable() {
@Override
public void run() {
// This will trigger onVideoTaken().
camera.stopRecordingVideo();
}
}, 2500);
6、設(shè)置手勢行為
cameraView.mapGesture(Gesture.PINCH, GestureAction.ZOOM); // 雙指縮放!
cameraView.mapGesture(Gesture.TAP, GestureAction.FOCUS_WITH_MARKER); // 點擊對焦!
cameraView.mapGesture(Gesture.LONG_TAP, GestureAction.CAPTURE); // 長按拍照!
關(guān)于CameraView更多功能和使用方法,請參考CameraView#usage 。