例如,将TextureView设置成半透明。值得注意的是TextureView必须在硬件加速的窗口中。...myView.setAlpha(0.5f) TextureView的继承层次如下图所示: 从类图中可以看到,TextureView继承自View,它与其它的View一样在View hierachy...关于TextureView更多的介绍可以通过Textureview 官方API来了解。...实例 例如,下面是使用MediaPlayer和TextureView实现视频播放的实例。注意TextureView中的draw方法和onDraw方法都是被定义成final的,不能被子类覆盖。...下面是具体的代码: public class MainView extends TextureView implements TextureView.SurfaceTextureListener {
TextureView 因为上面所说的SurfaceView不在主窗口中,它没法做动画没法使用一些View的特性方法,所以在Android 4.0中引入了TextureView,它是一个结合了View和...TextureView是一个可以把内容流作为外部纹理输出在上面的View。它本身需要是一个硬件加速层。事实上TextureView本身也包含了SurfaceTexture。...当客户端使用 TextureView 呈现内容时,界面工具包会使用 GPU 将 TextureView 的内容合成到 View 层次结构中。...在7.0以下系统如果使用场景有动画效果,可以选择性使用TextureView。 由于失效(invalidation)和缓冲的特性,TextureView增加了额外1~3帧的延迟显示画面更新。...TextureView总是使用GL合成,而SurfaceView可以使用硬件overlay后端,可以占用更少的内存。 TextureView的内部缓冲队列导致比SurfaceView使用更多的内存。
SurfaceView实现机制 双缓冲机制 TextureView实现机制 TextureView和SurfaceView的优缺点 1.SurfaceView实现机制 SurfaceView继承自View...和SurfaceView不同,TextureView必须在硬件加速的窗口中。 它显示的内容流数据可以来自Application进程或是远端进程。...TextureView继承自View,它与其它的View一样在View hierachy中管理与绘制。...TextureView重载了draw()方法,其中主要SurfaceTexture中收到的图像数据作为纹理更新到对应的HardwareLayer中。...4.TextureView和SurfaceView的优缺点 SurfaceView TextureView 内存 低 高 耗电 低 高 绘制效率 及时 1 ~ 3帧的延迟 截图 不支持 支持 动画 不支持
2).Android 4.0中的TextureView。...为了解决这个问上面那个我们刚说到的问题Android 4.0中引入了TextureView; TextureView与SurfaceView相比,TextureView并没有创建一个单独的Surface...2.SurfaceView灵活性没有TextureView好。...textureView=(TextureView) findViewById(R.id.textureview); textureView.setSurfaceTextureListener(this...);//设置监听函数 重写4个方法 // textureView=new TextureViewTest(this); // setContentView(textureView); videoImage
Google官方的Camera2BasicKotlin工程到手(该工程使用TextureView显示相机预览) TextureView显示相机预览 Camera2启动相机预览需要三个步骤: 打开Camera...--创建Session--启动预览 在创建Session的时候,传入的surface关联了textureView持有的SurfaceTexture: val texture = mTextureView...) 关联OpenGL 创建EGL环境,绑定输出到textureView持有的SurfaceTexture上; 创建Session的时候传递一个关联了OES纹理的surface,当预览数据更新时,将数据更新到纹理上...eglCreateWindowSurface(mEglDisplay, mEglConfig[0], textureView.surfaceTexture, null) // 6....eglSwapBuffers(mEglDisplay, mEglSurface) Demo 当TextureView引入GL环境后,我们就可以添加一些有趣的东西了,比如引入一个简单的粒子系统: ?
详细介绍 Android 中的 TextureView 1. TextureView 的原理 TextureView 是一个继承自 View 的类,其主要优势在于能够直接在硬件加速层进行渲染。...与 SurfaceView 不同,TextureView 支持复杂的视图层次并且可以与其他视图时序混用。这意味着,TextureView 能真正像普通的 View 一样参与到视图的动画和变换中。...private lateinit var textureView: TextureView private var mediaPlayer: MediaPlayer?...= findViewById(R.id.textureView) textureView.surfaceTextureListener = object : SurfaceTextureListener...在 TextureView 的内容上进行更多自定义绘制。
二、TextureView更像是一般的View,像TextView那样能被缩放、平移,也能加上动画。...TextureView只能在开启了硬件加速的Window中使用,并且消费的内存要比SurfaceView多,并伴随着1-3帧的延迟。...三、TextureView和SurfaceView都是继承自View类的,但是TextureView在Andriod4.0之后的API中才能使用。...SurfaceView可以通过SurfaceHolder.addCallback方法在子线程中更新UI,TextureView则可以通过TextureView.setSurfaceTextureListener...但是比如视频播放器或相机应用的开发,TextureView则更加适合。
视频切换完成,ImageView隐藏,如此往复循环,可行 实践 1.获取视频流图片方式,通过MediaMetadataRetriever,测试发现,部分机器获取的Bitmap可能为空,无法解决,放弃 2.使用TextureView...= null) { mediaPlayer.pause(); mediaPlayer.release(); } } public Bitmap getBitmap() { return textureView...null : textureView.getBitmap(); } @Override public void onDestroy() { super.onDestroy(); release(); }...= new TextureView(getActivity()); textureView.setLayoutParams(lp); content.addView(textureView); frameImage...(new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture
作用: TextureView 是一个显示内容的控件,可以在其内容上进行复杂的视图变换,如缩放、旋转等。...TextureView 渲染的内容会在视图层次中作为纹理进行处理。...使用场景: 视频播放需要特效变换(例如旋转、缩放) 动画内容 拍照、视频录制时的取景预览 val textureView = findViewById(R.id.textureView...) textureView.surfaceTextureListener = object : TextureView.SurfaceTextureListener { override fun...TextureView 在视图层级中作为纹理处理,性能稍逊,但提供更多视图操作灵活性。
当TextureView初始化完成时,我们调用startPreview(screenTexture: SurfaceTexture, width: Int, height: Int)方法,来通知CameraWrapper...并且Render接收TextureView的SurfaceTexture缓冲区,包括宽高,在内部初始化完成后开始渲染。 ...Tip:这里会有两个SurfaceTexture,一个时我们自己初始化给Camera的SurfaceTexture,一个是TextureView提供的SurfaceTexture。...SurfaceTexture:前面讲到的由TextureView提供的屏幕纹理缓冲区。 ScreenTextureWrapper:屏幕纹理缓冲区的环境。 width:TextureView的宽度。...height:TextureView的高度。
本课程内容由 @公众号:小驰笔记出品,欢迎关注公众号,获取更多交流信息~ 显示需要借助surface,一般采用surfaceview或者textureview; 相关重要流程: 1、自定义TextureView...mSurfaceTextureListener); } 3、surfaceTexture监听中,SurfaceTextureAvailable的时候,去执行opencamera的操作 private final TextureView.SurfaceTextureListener...mSurfaceTextureListener = new TextureView.SurfaceTextureListener() { @Override
TextureView TextureView是SurfaceTexture和View的组合。...GLES可以通过把TextureView中的SurfaceTexture传给创建EGL的调用来在TextureView上渲染。...SurfaceView or TextureView SurfaceView有自己专用的Surface,而TextureView和它所属Window上的view共用一块Suface。...使用TextureView时,UI工具通过GPU将TextureView中的内容合成到它的view hierarchy中——当TextureView内容更新时,可能会导致其它view的重绘。...而缩放TextureView只需要使用TextureView#setTransform()配置转换矩阵。
各种View大比较 下面我们来比较一下 SurfaceView、GLSurfaceView 和 TextureView。...TextureView TextureView 同样继承于View,它在4.0(API level 14)中引入。...由于发现GLSurfaceView 不能根据屏幕的变化而变化,所以引入了 TextureView。...所以TextureView必须在硬件加速的窗口中(可以通过 Android的配置文件进行设置)。...因为TextureView不包含Surface,所以其实就是一个普通的View,可以和其它普通View一样进行移动,旋转,缩放,动画等变化。
解决办法 为了在应用中更好地管理 SurfaceView 和普通 View 的叠加问题,可以考虑以下解决方案: 1、 使用 TextureView: TextureView 也是用于高效图形渲染的控件,...缺点是 TextureView 的性能可能不如 SurfaceView 高,特别在高帧率的场景下。...TextureView textureView = new TextureView(context); textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener
有同学可能会说了,我直接用TextureView渲染视频画面,然后在TextureView上盖一层ImageView可以吗? 好像显示效果上没有什么问题,但是仔细分析还是不能满足要求?...1.ImageView和TextureView有明显的层级关系,如果出现View层级的问题,不太好处理 2.TextureView渲染视频的时候,提供了getBitmap()接口来截取视频的某一帧,如果盖上一层...ImageView无法实现截图的功能 3.ImageView盖在TextureView,会拦截TextureView的事件,造成播放器交互方面的问题。...上面三个问题表示TextureView上面盖一层ImageView的方式是行不通的。 既然行不通,有没有方法可以解决这个问题?...其实除了TextureView和SurfaceView渲染视频之外,GLSurfaceView也是渲染视频的一种View,GLSurfaceView和OpenGL结合,可以实现给播放中的视频添加水印的目的
文中几种方案的对比,以及SurfaceView、GLSurfaceView和TextureView相关知识点的讲解,非常实用,值得收藏。...但TextureView需要硬件加速层,也就是必须使用GPU绘制,使得TextureView比SurfaceView和GLSurfaceView更耗性能、更耗电。...TextureView执行动画时,效果和普通View一样。...TextureView执行动画时,效果和普通View一样。...TextureView执行动画时,在执行移动、缩放、旋转和透明度动画时不会出现异常,更适用于小窗播放视频功能。
要实现这些功能就得使用TextureView,但TextureView有个缺点就是性能低耗电高。...四、TextureView 如下源码所示,TextureView继承于View,并重载了View的draw()方法,它与其它的View一样在View hierarchy中管理与绘制。...值得注意的是TextureView必须在硬件加速的窗口中,通过HardwareLayer更新视图。它需要硬件加速层,这使得TextureView比SurfaceView更耗性能。...TextureView作为普通View在View hierarchy中管理与绘制,更适用于小窗播放视频功能。...但TextureView需要硬件加速层,使得TextureView比SurfaceView和GLSurfaceView更耗性能。
方法设置SurfaceHolder给相机,通常在使用SurfaceView作为预览控件时使用; 通过Camera#setPreviewTexture方法设置SurfaceTexture给相机,通常在使用TextureView...SurfaceHolder#surfaceCreated回调中拿到准备好的SurfaceHolder设置给Camera即可 camera.setPreviewDisplay(surfaceHolder); 方式二、使用TextureView...使用TextureView作为预览UI控件时,在TextureView#onSurfaceTextureAvailable回调中拿到准备好的SurfaceTexture设置给Camera即可 camera.setPreviewTexture
作为输出的 Surface,当 FlutterView 被 RecyclerView 回收时,TextureView 会触发 Surface Destroy,当 FlutterView 被 RecyclerView...重用并重新参与绘制时,TextureView 会触发 Surface Available(Create); 性能表现分析 测试手机使用了 Google Pixel,在现在来说算是性能比较差了,可以更好地反映实际的状况...卡片空白帧数 在 Demo 的场景中,RecyclerView 在惯性滚动时,将新的卡片从不可见区域移进可见区域,触发了 TextureView 的绘制,而 TextureView 的 Surface...如果当前帧是第 N 帧,在第 N 帧的 Draw 的过程中触发了 TextureView 的 Surface Available(Create),同时触发了 Flutter 的 ScheduleFrame...再对比多引擎同时运行多个 Flutter App 的情况: Native Heap 小幅增加,猜测主要是额外线程的堆栈; EGL mtrack 因为多引擎 Demo 使用的是 TextureView,TextureView
successful */public native int SmartPlayerSetFlipHorizontal(long handle, int is_flip);渲染模式:支持SurfaceView和TextureView...= null && sSurfaceView instanceof TextureView && ((TextureView) sSurfaceView).getSurfaceTexture() !...= null)texture_view_surface_ = new Surface(((TextureView) sSurfaceView).getSurfaceTexture());}surface...支持断网自动重连、视频追赶,支持buffer状态等回调;支持视频view实时旋转(0° 90° 180° 270°);支持视频view水平反转、垂直反转;支持Surfaceview/OpenGL ES/TextureView
领取专属 10元无门槛券
手把手带您无忧上云