基于SurfaceView封装相机,并添加自定义水印效果
根据项目需要,android自带的相机不能满足自己需求,需要在拍完相机后能处理照片添加水印,并且照相机界面能自己定义风格,在网上找了现有代码自己加以重构(PS:可能封装的不够好),基本满足相机功能和业务逻辑分离,到达代码复用效果。
重构代码遇到3个问题这里和大家分享下:
1.自定义相机设置尺寸不对导致SurfaceView显示画面变形
2.手动点击对焦
3.水印添加美观满足用户自定义
问题一:
针对这个问题也在网上找了资料,基本解释是 由于预览图像大小跟SurfaceView 大小不一致引起
于是找了可行代码块
代码块
代码块语法遵循标准markdown代码,例如:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
int rotation = getDisplayOrientation();
mCamera.setDisplayOrientation(rotation);
Camera.Parameters parameters = mCamera.getParameters();
parameters.setRotation(rotation);
mCamera.setParameters(parameters);
adjustDisplayRatio(rotation);
}
public int getDisplayOrientation() {
android.hardware.Camera.CameraInfo camInfo = new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(
Camera.CameraInfo.CAMERA_FACING_BACK, camInfo);
Display display = ((WindowManager) getContext().getSystemService(
Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0:
degrees = 0;
break;
case Surface.ROTATION_90:
degrees = 90;
break;
case Surface.ROTATION_18