基于SurfaceView封装相机,并添加自定义水印效果

这篇博客讲述了如何基于SurfaceView封装一个自定义相机功能,以满足添加水印及自定义界面的需求。作者在重构过程中遇到了三个问题,包括相机显示尺寸调整、手动对焦以及优化水印显示。解决方案包括在surfaceChanged方法中调整显示比例,通过监听onTouchEvent实现手动对焦,以及创建一个公共View来设置照片的水印。通过这些方法,实现了相机功能与业务逻辑的分离,提高了代码复用性。
摘要由CSDN通过智能技术生成

基于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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值