Android view变形,如何解决TextureView显示内容变形的问题

本文探讨了Android中TextureView显示内容变形的原因,主要是由于SurfaceTexture的buffer size与Camera Output Stream大小比例不一致。解决方法包括通过SurfaceTexture#setDefaultBufferSize设置合适的buffer size,以及使用TextureView#setTransform调整显示。在竖屏时,需要注意尺寸转换。调试时,可通过查看"configure_stream"的日志获取Camera stream的大小信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TextureView

TextureView做为SurfaceTexture和View的结合,把SurfaceTexture中的buffer内容copy到自己的Surface上显示。如图表示了Camera preview的数据是怎么显示到TextureView上的。

eb11b967bc19

Camera buffer flow

从图中可以看到,Camera有自己的Output Stream,这个Output Stream有特定的比例,如1280 x 720,可以根据StreamConfigurationMap#getOutputSize()来查看。

而SurfaceTexture所创建的Surface也有其大小,为SurfaceTexture中的default buffer size大小。TextureView创建时,会把SurfaceTexture的default buffer size设置为自己的宽高,当TextureView的大小改变时也会同时更新SurfaceTexture的buffer size为自己更新的宽高。也就是默认情况下SurfaceTexture所创建的Surface的大小为TextureView的大小。但我们可以通过SurfaceTexture#setDefaultBufferSize来改变这个大小。

TextureView的显示内容为什么会变形?

如上面的描述,TextureView显示的内容是SurfaceTexture创建的output Surface的内容,而SurfaceTexture所创建的Surface的内容来自Camera的output Stream。

SurfaceTexture所创建的Surface大小默认为Tex

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值