SurfaceView預覽camera
阿新 • • 發佈:2018-11-09
SurfaceView 預覽Camera
實現步驟
1.增加許可權
<uses-permission android:name="android.permission.CAMERA"/>
2.動態申請許可權
//檢查訪問攝像頭許可權 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 100); } else { //擁有許可權 initCameraView(); }
3.為SurfaceView的SurfaceHolder增加回調
類中要實現回撥 implements SurfaceHolder.Callback
private void initCameraView() {
surfaceView = findViewById(R.id.surfaceview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
}
4.Camera相機初始化並關聯SurfaceHolder
記得加上這句camera.startPreview()
@Override
public void surfaceCreated(final SurfaceHolder holder) {
new Thread(new Runnable() {
@Override
public void run() {
try {
if (camera == null)
camera = Camera.open(1);
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
}
});
camera.setDisplayOrientation(90);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}