Android:解析 SurfaceView & TextureView

本文介绍了Android中的SurfaceView和TextureView,两者都用于高性能的绘制和渲染,常用于相机预览和视频播放。SurfaceView通过子线程更新画面,支持主动刷新,适合需要控制帧率的应用场景,而TextureView则可以进行移动、转换和动画,适用于需要变换效果的场景。SurfaceView有双缓冲机制,可能引起闪屏,TextureView在内存消耗和延迟上相对较高。
摘要由CSDN通过智能技术生成

1、关于 SurfaceView 和 TextureView

1.1 基础

SurfaceView 以及 TextureView 均继承于 android.view.View,属于 Android 提供的控件体系的一部分。与普通 View 不同,它们都在独立的线程中绘制和渲染。所以,相比于普通的 ImageView 它们的性能更高,因此常被用在对绘制的速率要求比较高的应用场景中,用来解决普通 View 因为绘制的时间延迟而带来的掉帧的问题,比如用作相机预览、视频播放的媒介等。

相比于普通的 View,SurfaceView 有以下几点优势:

  1. SurfaceView 适用于主动刷新,普通的 View 无法进行主动刷新;
  2. SurfaceView 通过子线程来更新画面,而普通的 View 需要在主线程中更新画面;
  3. 最后就是缓冲的问题,普通的 View 不存在缓存机制,而 SurfaceView 存在缓冲机制。

1.2 两种控件的基础使用

1.2.1 TextureView 的使用

TextureView 在 API 14 中引入,用来展示流,比如视频和 OpenGL 等的流。这些流可以来自应用进程或者是跨进程的。它只能用在开启了硬件加速的窗口,否则无法绘制任何内容。与 SurefaceView 不同,TextureView 不会创建一个独立的窗口,而是像一个普通的 View 一样。这种区别使得 TextureView 可以移动、转换和做动画等,比如你可以使用 TextureView 的 setAlpha() 方法将其设置成半透明的。

TextureView 的使用非常简单,你只需要获取到它的 SurfaceTexture. 然后就可以使用它来渲染。下面的示例说明了如何使用 TextureView 作为相机的预览控件,

class TextureViewActivity : CommonActivity<ActivityTextureViewBinding>(), TextureView.SurfaceTextureListener {
   

    private lateinit var camera: Camera
    private lateinit var textureView: TextureView

    override fun getLayoutResId(): Int = R.layout.activity_texture_view

    override fun doCreateView(savedInstanceState: Bundle?) {
   
        textureView = TextureView(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值