android SurfaceView + Camera全屏自适应屏幕尺寸

包含三个尺寸:手机显示屏尺寸,SurfaceView尺寸,Camera.Size尺寸。

其中:SurfaceView尺寸是可以调整的,手机显示屏尺寸和Camera.Size尺寸无法调整,所以只能根据手机显示屏尺寸找到Camera.Size中最接近的尺寸,然后将SurfaceView调整为匹配的尺寸。将在SurfaceView外的界面留空,以达到全屏的效果(没有合适的尺寸,是达不到完全全屏的,小部分留空效果和全屏差不多)。

算法:

// mShowPreview = findViewById(R.id.showPreview);
//int CAMERA_WIDHT = 0,int CAMERA_HEIGHT = 0;

private void fit_screem(){
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(mSurfaceView.getLayoutParams());
        int int_range = 10000;
        List<Camera.Size> ls = new ArrayList<Camera.Size>();
        ls =mCamera.getParameters().getSupportedPreviewSizes();
//     将手机屏幕的尺寸附初始值
        int screem_height  = ScreenUtils.width,screem_widht = ScreenUtils.height;
//            先找到宽和显示屏最接近的值
        for(int i =0;i<ls.size();i++){
            if(Math.abs(screem_height - ls.get(i).height)<int_range ){
                int_range = Math.abs(screem_height - ls.get(i).height);
                CAMERA_HEIGHT =  ls.get(i).height;
            }
        }
//        再找到和宽匹配,并和高最接近的值作为高
        int_range = 10000;
        for(int i =0;i<ls.size();i++){
            if(ls.get(i).height == CAMERA_HEIGHT && Math.abs(screem_widht- ls.get(i).width)<int_range){
                int_range = Math.abs(screem_widht - ls.get(i).width);
                CAMERA_WIDHT =  ls.get(i).width;
            }
        }
        lp.height = CAMERA_WIDHT;
        lp.width = CAMERA_HEIGHT  ;
        mSurfaceView.setLayoutParams(lp);
    }

以上代码很奇怪,高和宽在做运算比较,原因是Camera.Size中的尺寸是横屏的尺寸,宽大于高,所以最后

lp.height = CAMERA_WIDHT;
 lp.width = CAMERA_HEIGHT;

之所以将高和宽名字写反,是因为后面将相机旋转90后,高和宽的值就是正确的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值