返回顶部
首页 > 资讯 > 移动开发 >Android音视频开发(三)TextureView
  • 1244
分享到

Android音视频开发(三)TextureView

textureviewAndroid 2022-06-06 13:06:26 1244人浏览 八月长安
摘要

简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceVi

简介

TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。

与SurfaceView的区别

SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。
TextureView不会创建单独的窗口,而是充当常规View。此特点允许对TextureView进行移动,转换,设置动画等操作。例如,可以设置透明度。
TextureView只能在硬件加速窗口中使用。 用软件渲染时,TextureView将不绘制任何内容。
TextureView比SurfaceView更耗内存,使用时请注意选择。

使用

使用TextureView很简单:您所需要做的就是获取它的SurfaceTexture。然后用该SurfaceTexture显示内容,下面演示如何使用TextureView显示Camera的预览界面:

先开启硬件加速:

 
class TextuReactivity : AppCompatActivity(),TextureView.SurfaceTextureListener {
    private var camera : Camera? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_texture)
        tv_video.surfaceTextureListener = this
    }
    override fun onSurfaceTextureAvailable(surface: SurfaceTexture?, width: Int, height: Int) {
        //在SurfaceTexture可用时调用
        camera = Camera.open()//打开相机
        try{
        	//设置相机预览的容器
            camera?.setPreviewTexture(tv_video.surfaceTexture)
            camera?.setDisplayOrientation(90)
            //开始预览
            camera?.startPreview()
        }catch (e:Exception){
        }
    }
    override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture?, width: Int, height: Int) {
        //当SurfaceTexture缓冲区大小更改时调用
    }
    override fun onSurfaceTextureUpdated(surface: SurfaceTexture?) {
        //当SurfaceTexture有更新时调用
    }
    override fun onSurfaceTextureDestroyed(surface: SurfaceTexture?): Boolean {
        //当指定SurfaceTexture即将被销毁时调用。
        //如果返回true,则调用此方法后,表面纹理中不会发生渲染。
        //如果返回false,则客户端需要调用SurfaceTexture#release()。大多数应用程序应该返回true
        camera?.stopPreview()
        camera?.release()
        return true
    }
}

使用TextureView最重要的是要知道只有在将TextureView附加到窗口(并且onAttachedToWindow()已被调用)后,SurfaceTexture才可用。因此,建议在SurfaceTexture可用时来执行相关操作。
要注意,只有一个调用者可以使用TextureView。例如,如果使用TextureView显示相机预览,就不能使用lockcanvas()同时在TextureView上绘制。


作者:GdinKing


--结束END--

本文标题: Android音视频开发(三)TextureView

本文链接: https://lsjlt.com/news/29196.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作