1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > android SurfaceView + Camera全屏自适应屏幕尺寸

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

时间:2024-03-11 08:46:45

相关推荐

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后,高和宽的值就是正确的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。