以下方案均为camera api的实现思路(camerax封装更简单)
一、全屏展示方案大致思路
1、预览用srufaceview,外部可用framelayout(方便添加ui),srufaceview居中
2、分辨率的话根据手机屏幕大小,选择相机硬件中提供的最合适的分辨率,根据分辨率修改srufaceview的宽度或高度(此时总有宽或高总有一个会超出屏幕,不用担心,因为srufaceview居中放在了framelayout中,会裁切)
二、AI归纳:
-
布局用FrameLayout包裹SurfaceView,设置gravity为center
-
根据屏幕尺寸,从相机支持的预览尺寸中选择宽高比
最接近的那个
-
在SurfaceView的onMeasure中,根据相机预览尺寸计算
View应该显示的大小。为了充满屏幕,会让一个维度
(宽或高)超出屏幕范围
-
FrameLayout会自动裁剪超出的部分,因为设置了
gravity为center,所以裁剪是均匀的,不会偏向一边
这样就实现了充满屏幕、无黑边、无变形的预览效果。