camera预览界面
效果
ue图如下:
问题
用camera2开发人脸录入界面,使用TextureView展示预览界面。发现两个问题:
1.预览界面无法显示为圆形,你会发现TextureView默认是矩形,且onDraw等方法是final 的,无法继承重写
2.如果TextureView的高宽是一样的长度,你会发现预览界面是压缩的,原因是大部分手机的camera支持的尺寸很少有1:1的,大部分是4:3的
重写TextureView的ViewOutlineProvider
原理还是进行裁剪,通过重写ViewOutlineProvider的getOutline方法,一般来说对任何view,都可以通过该接口实现裁剪和圆角等效果。
先将TextureView的高宽设置成4:3,这样不会压缩,再对其进行裁剪,先裁剪成正方形的矩形(如虚线所示),再将圆角大小设置成正方形边长的一半,就会显示成圆形。裁剪原理图如下:
代码如下:
class RoundTextureView(context: Context, attrs: AttributeSet) : TextureView(context, attrs) {
init {
outlineProvider = object : ViewOutlineProvider(