Android 中Textureview和SurfaceView使用问题总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中Textureview和SurfaceView使用问题总结相关的知识,希望对你有一定的参考价值。

参考技术A TextureView是android 4.0之后加入的,低版本么这个类。TextureView必须工作在开启硬件加速的环境中,也即配置文件里Activity的设置项里:android:hardwareAccelerated="true" 默认的这个属性就是true,因此不用再写了。但如果写成false,可以看到onSurfaceTextureAvailable()这个回调就进不来了;

有两点跟Surfaceview不同。第一,TextureView创建过程中没有进到onSurfaceTextureSizeChanged()这个函数里。而SurfaceView在创建过程中,从无到有的时候会进到大小发生变化回调里。第二,onSurfaceTextureUpdated()这个函数每上来一帧数据,这块就进来一次。这是跟Surfaceview相比,最伟大的一个地方。通过这个接口,可以将上来的SurfaceTexture送给OpenGL再去处理。

SurfaceTexture和TextureView的关系:
如果说TextureView是一幅画的话,那SurfaceTexture就是画布,真正渲染的载体是SurfaceTexture。

TextureView可以像一般View执行各种变化,其中有个textureView.setAlpha(1.0f);默认不写这句话,它的alpha也是1.0f,即不透明。如果设成透明0.0f,可以看到啥都看不到了,这一点跟Surfaceview刚好相反。Surfaceview的SurfaceHolder一般要设一下Transparent即透明。但TextureView因为是个view,任何一个png的照片透明度设成0肯定啥都看不到。

SufaceView不建议使用,因为有些手机有属性动画,会造成部分手机用户体验不好

TextureView在退出后台再次进入到应用中,不会立即加载数据,还有就是复杂的点击事件会有问题

SurfaceView和TextureView的区别

SurfaceView和TextureView均继承于android.view.View,与其它View不同的是,两者都能在独立的线程中绘制和渲染,在专用的GPU线程中大大提高渲染的性能。
SurfaceView专门提供了嵌入视图层级的绘制界面,开发者可以控制该界面像Size等的形式,能保证界面在屏幕上的正确位置。但也有局限:

大专栏  SurfaceView和TextureView的区别于是独立的一层View,更像是独立的一个Window,不能加上动画、平移、缩放;
两个SurfaceView不能相互覆盖。
TextureView更像是一般的View,像TextView那样能被缩放、平移,也能加上动画。TextureView只能在开启了硬件加速的Window中使用,并且消费的内存要比SurfaceView多,并伴随着1-3帧的延迟。

以上是关于Android 中Textureview和SurfaceView使用问题总结的主要内容,如果未能解决你的问题,请参考以下文章

Android Camera2 拍照——使用TextureView

玩转Android Camera开发:使用TextureView和SurfaceTexture预览Camera 基础拍照demo

Android TextureView简易教程

Android Camera开发:使用TextureView和SurfaceTexture预览Camera 基础拍照demo

玩转Android Camera开发:使用TextureView和SurfaceTexture预览Camera 基础拍照demo

如何在TextureView Android中绘制立方体[关闭]