例如,将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环境后,我们就可以添加一些有趣的东西了,比如引入一个简单的粒子系统: ?
二、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
本课程内容由 @公众号:小驰笔记出品,欢迎关注公众号,获取更多交流信息~ 显示需要借助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一样进行移动,旋转,缩放,动画等变化。
当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的高度。
文中几种方案的对比,以及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更耗性能。
有同学可能会说了,我直接用TextureView渲染视频画面,然后在TextureView上盖一层ImageView可以吗? 好像显示效果上没有什么问题,但是仔细分析还是不能满足要求?...1.ImageView和TextureView有明显的层级关系,如果出现View层级的问题,不太好处理 2.TextureView渲染视频的时候,提供了getBitmap()接口来截取视频的某一帧,如果盖上一层...ImageView无法实现截图的功能 3.ImageView盖在TextureView,会拦截TextureView的事件,造成播放器交互方面的问题。...上面三个问题表示TextureView上面盖一层ImageView的方式是行不通的。 既然行不通,有没有方法可以解决这个问题?...其实除了TextureView和SurfaceView渲染视频之外,GLSurfaceView也是渲染视频的一种View,GLSurfaceView和OpenGL结合,可以实现给播放中的视频添加水印的目的
方法设置SurfaceHolder给相机,通常在使用SurfaceView作为预览控件时使用; 通过Camera#setPreviewTexture方法设置SurfaceTexture给相机,通常在使用TextureView...SurfaceHolder#surfaceCreated回调中拿到准备好的SurfaceHolder设置给Camera即可 camera.setPreviewDisplay(surfaceHolder); 方式二、使用TextureView...使用TextureView作为预览UI控件时,在TextureView#onSurfaceTextureAvailable回调中拿到准备好的SurfaceTexture设置给Camera即可 camera.setPreviewTexture
转换算法一(RGB转换) 有了TextureView,就能通过getBitmap()方法拿到bitmap,接下来就是把bitmap转换成字符串,相关算法这里有一份: https://github.com...算法 Utils.java: 1public class Utils { 2 3 public static void startConvert(final TextureView textureView...= null) { 8 Bitmap bitmap = textureView.getBitmap(); 9 if(bitmap...上面还在显示视频画面, 而我们只需要TextView显示的字符串, 这是一种浪费, 可是TextureView不显示就拿不到Bitmap 很多视频播放器是SurfaceView的封装, 也是没法直接获取到...其实相机依赖的不是TextureView而是Surface, ImageReader.getSurface()方法可以获得它内部的Surface.
作为输出的 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
Android Camera2采集摄像头原始数据并手动预览 最近研究了一下android摄像头开发相关的技术,也看了Google提供的Camera2Basic调用示例,以及网上一部分代码,但都是在TextureView...和其他程序一样,通过ImageReader来获取到CameraCaptureSession传递出来的数据,与Google例子不同的是,我取消了把TextureView的传递,改为单独以ImageReader...调用libyuv做RGB之间的数据转换 获取到YUV数据之后,就可以在UI界面上进行绘制了,通过简单了解,可以通过OpenGLES来绘制,也可以转为Bitmap直接在TextureView上绘制。...然而后来发现,android.graphics.Bitmap并不支持直接将YUV数据存入,只能转为RGB数据格式,才能存入Bitmap,进而在TextureView上绘制。...与上面代码中类似,通过TextureView.lockCanvas(),获取到Canvas,调用drawBitmap()将图像写入,即可完成绘制。 运行截图 开启预览时的4:3画面和16:9画面 ?
最简单方法:自定义TextureView 二、涉及到的相关api && 第三方app如何去进行适配?...设置拍照方向 captureBuilder.set(CaptureRequest.JPEG_ORIENTATION,rotation); Camera2上,是没有接口直接设置预览方向的,所以,基本都是通过TextureView.setTransform...(matrix) 接口来调整textureView的显示。
视频渲染SDK介绍 半年之前我写过一篇文章——为播放器外接一套渲染框架,本质就是通过OpenGL将视频的内容绘制在SurfaceView或者TextureView的画布上,实现控制视频渲染的作用,当时有很多小伙伴很希望接入这个...dependencies { implementation 'com.github.JeffMony:Laker:1.0.5' } 接口介绍 setOnSurfaceListener 设置SurfaceView或者TextureView...的监听 setOnRenderListener设置渲染错误的回调,如果渲染过程中出现错误会回调给上层 setTextureView和setSurfaceView分别支持设置SurfaceView和TextureView...OnSurfaceListener listener); void setOnRenderListener(OnRenderListener listener); void setTextureView(TextureView
领取专属 10元无门槛券
手把手带您无忧上云