首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android中使用TextureView播放视频

1).TextureView兄弟SurfaceView 应用程序视频或者opengl内容往往是显示一个特别的UI控件中:SurfaceView。...SurfaceView工作方式是创建一个置于应用窗口之后新窗口。...这种 方式效率非常高,因为SurfaceView窗口刷新时候不需要重绘应用程序窗口(android普通窗口视图绘制机制是一层一层,任何一个子元素或者 是局部刷新都会导致整个视图结构全部重绘一次...用来绘制,这使得它可以像一般View一样执行一些变换操作,设置透明度等。...,然后初始化播放器,预加载视频,如果视频文件不存在,从assetscopy一份到sdcard目录下,视频加载完毕隐藏图片,我这边图片默认显示是android项目自带图片,你们可以根据需求显示想要图片

2.4K20

小窗播放视频原理和实现(

这使得SurfaceView绘制可以单独线程中进行,从而可以绘制复杂内容。由于SurfaceView内容没有显示宿主窗口中, 这样它显示需要同步宿主窗口变化。...Android N以上设备上,SurfaceView执行移动、缩放和旋转时会同步变化,不会看到黑边。...TextureView作为普通ViewView hierarchy中管理与绘制执行移动、缩放、旋转和透明度动画时不会出现异常,更适用于小窗播放视频功能。...但TextureView需要硬件加速层,也就是必须使用GPU绘制,使得TextureView比SurfaceView和GLSurfaceView更耗性能、更耗电。...从ActivitysetContentView()开始,setContentView调用了WindowsetContentView方法。

4.4K110
您找到你想要的搜索结果了吗?
是的
没有找到

剖析Activity、Window、ViewRootImpl和View之间关系

再回到Activity生命周期onCreate,调用setContentView创建一个不可见DecorView,当ActivityThread.handleResumeActivity -> Activity.makeVisible...值得一提是FrameBuffer知识点,开始绘制时,会调用Surface.lockCanvas,由SurfaceFlinger锁定一块共享内存传递给Canvas,内存共享是设备显存,在上面绘制相当于屏幕上绘画...触类旁通之SurfaceView SurfaceView会创建一个Z轴靠新Window,通过挖洞(重叠区域变透明)使自己可见。...观察一SurfaceView内部结构,似乎和ViewRootImpl差不多,同时持有IWindowSession,Surface和MyWindow(同ViewRootImple.WindowSession...relayoutWindow、addWindow、Surface一气呵成,流程比较简单,注意一SurfaceHolder,一般使用SurfaceView时候都是操作SurfaceHolder.Callback

1.4K80

SurfaceView那点事儿

通常情况,使用以下步骤来创建一个SurfaceView模板 创建SurfaceView 创建自定义SurfaceView 继承自 SurfaceView,并且实现两个接口:SurfaceHolder.Callback...自定义SurfaceView构造方法中,需要对SurfaceView进行初始化。...因此,之前绘图操作将会被保留,如果需要擦除,则可以绘制前,通过drawColor()方法来机型清屏操作。...绘制时候,充分利用SurfaceView三个回调方法,surfaceCreated方法中开启子线程进行绘制, 而子线程使用一个while(mIsDrawing)循环来不停绘制,并通过unlockCanvasAndPost...* View里,我们自定义一个View,onDraw()里完成绘制,另外View还有个onTouchEvent方法, 我们可以获取用户手势操作!

70430

Android SurfaceView学习示例

SurfaceView是View子类,使用方式与任何View所派生类都是完全相同,可以像其他View那样应用动画,并把它们放到布局中。 ...使用OpenGL,你可以再Surface上绘制任何支持2D或者3D对象,与2D画布上模拟相同效果相比,这种方法可以依靠硬件加速(可用时候)来极大地提高性能。 ...SurfaceView 和 View 明显不同之处在于: 1、继承SurfaceView  视图可以另起一个线程,或者说子线程中更新视图。...2、 SurfaceView 画图方法是子线程中执行 而 View类那个示例 画图方法是UI线程中执行。...3、SurfaceView绘图之前必须使用lockCanvas 方法锁定画布,并得到画布,然后再画布上绘制;当绘制完成,使用unlockCanvasAndPost 方法解锁画布,然后就显示到屏幕上。

87430

2014-11-6Android学习------Android画笔实现画曲线--------贝塞尔曲线(二)

要创建一个新SurfaceView,需要创建一个新扩展了SurfaceView类,并实现SurfaceHolder.Callback。...SurfaceHolder回调可以底层Surface被创建和销毁时候通知View,并传递给它对SurfaceHolder对象引用,其中包含了当前有效Surface。...,手指按并拖动 myDraw(); //画出贝塞尔曲线 logic(); //通过起始点和终点构造控制点,这个都是贝塞尔曲线需要用三个点...drawQpath(canvas); //画布上执行贝塞尔曲线绘制 sfh.unlockCanvasAndPost(canvas); //画完之后取消锁定.../画布上绘制出这条曲线 } 7.上面的所有准备工作作为了,还有个需要处理,就是监听我手指移动事件 //响应触摸屏事件,通过手指位置取得两个重要点,起始点,和终止点

43630

【Android 性能优化】应用启动优化 ( Trace 文件分析 | 结合代码分析 Trace 文件 )

: 线程选择 : 选择要分析是哪个线程 , 在这里一般分析 main 主线程 , 选择该 main 线程 , 下面的图标显示就是主线程操作细节 ; 方法调用图 ( Call Chart )...: 按住 Ctrl 不松开 , 滚动鼠标滚轮 , 可以放大缩小上述方法调用图 ; 该图拉长 , 很长 , 大约有一两百米样子 ; 查看具体某个方法执行时间 : 将鼠标移动到某个方法矩形块中...); mSurfaceView = findViewById(R.id.surfaceView); // 创建直播推流器, 用于将采集视频数据推流到服务器端...10, Camera.CameraInfo.CAMERA_FACING_BACK); // 设置 Camera 采集图像本地预览组件, mSurfaceView...设置 Camera 图像采集预览组件 : 耗时 117 微秒 ; // 设置 Camera 采集图像本地预览组件, mSurfaceView 界面先绘制摄像头 /

3.2K10

SurfaceView播放视频发送弹幕并实现滚动歌词

本文实例为大家分享了SurfaceView播放视频发送弹幕,并实现滚动歌词,供大家参考,具体内容如下 SurfaceView使用步骤 使用SurfaceView步骤: 首先要继承SurfaceView...重写方法:surfaceChanged:surface大小或格式发生变化时触发,surfaceCreated调用后该函数至少会被调用一次。...surfaceCreated:Surface创建时触发,一般在这个函数开启绘图线程(新线程,不要再这个线程中绘制Surface)。...弹幕是展示视频上面的,所以我们要给展示弹幕SurfaceView设置两个方法: surfaceView_danmu.setZOrderOnTop(true); ——置于上方 surfaceView_danmuHolder.setFormat...每隔一秒去拿该歌词下一个歌词时间与进度匹配,如果进度 =该时间,那么就画该歌词SurfaceView上;<则不画该歌词 一定要写SD卡读写权限!!!!!

45610

Android面试常问基础知识点(附详细解答)

30、介绍SurfView 1.什么是SurfaceView? Surface意为表层、表面,顾名思义SurfaceView就是指一个表层View对象。...因为它需要另外一个线程来执行绘制操作,所以我们可以它生命周期初始化阶 段开辟一个新线程,然后开始执行绘制,当生命周期结束阶段我们插入结束绘制线程操作。...这些是由其内部一个SurfaceHolder对象完成SurfaceView绘制原理是绘制前先锁定画布(获取画布),然后等都绘制结束以后在对画布进行解锁 ,最后把画布内容显示到屏幕上。...通常情况,使用以下步骤来创建一个SurfaceView模板: (1)创建SurfaceView 创建自定义SurfaceView继承自SurfaceView,并实现两个接口:SurfaceHolder.Callback...绘制时候,surfaceCreated()方法中开启子线程进行绘制,而子线程使用一个while(mIsDrawing)循环来不停进行绘制绘制逻辑中通过lockCanvas()方法获取Canvas

2.3K31

SurfaceView 与 TextureView 详解

在说 SurfaceView 与 TextureView 之前,需要先说一几个相关部分。 Surface 简介 Surface 就是“表面”意思,可以简单理解为内存中一段绘图缓冲区。...所以它优点就是可以独立线程中绘制,不影响主线程,而且使用双缓冲机制,播放视频时画面更顺畅。...区别在于TextureView是View hierachy中做绘制,因此一般它是主线程上做Android 5.0引入渲染线程,它是渲染线程中做)。...而SurfaceView+SurfaceTexture单独Surface上做绘制,可以是用户提供线程,而不是系统主线程或是渲染线程。...与 SurfaceView 相比,TextureView 具有更出色 Alpha 版和旋转处理能力,但在视频上以分层方式合成界面元素时,SurfaceView 具有性能方面的优势。

11.6K60

Android SurfaceView游戏开发示例

当我们需要开发一个复杂游戏时候,而且对程序执行效率要求很高时,View类就不能满足需求了,这时必须用SurfaceView类进行开发。...例如,对速度要求很高游戏时,View类就不能满足需求了,这时必须使用SurfaceView类进行开发。例如,对速度要求很高游戏,可以使用双缓冲来显示。...游戏中背景、人物、动画等都需要绘制一个画布(Canvas)上,而SurfaceView可以直接访问一个画布,SurfaceView 是提供给需要直接画像素而不是使用窗体部件应用使用。...每个Surface创建一个Canvas对象(但属性时常改变),用来管理View和Surface上绘图操作。 ...super.onCreate(savedInstanceState); gameView = new GameSurfaceView(this); setContentView

99520

Android使用SurfaceView实现飘赞动画

最近做直播项目,需要实现点赞动画,一提起动画就想到了使用View属性动画,后来想了一,那么多用户点赞,会导致屏幕上出现很多View,开销太大,一定会很卡,所以看主流主播软件用什么方案解决。...于是反编译了映客apk,大概看了一,它点赞只用了一个SurfaceView,每个心都是实时画到画布上去,这样效率确实很高,再多心也不怕了。...先看一效果: ZanBean类,每个ZanBean都要负责实时更新自己位置、透明度等数据 import android.animation.TypeEvaluator; import android.animation.ValueAnimator...< (); private Paint p; /** * 负责绘制工作线程 */ private DrawThread drawThread; public ZanView(Context...,由于线程是死循环 没有心需要绘制时候会结束线程*/ if (isEnd) { isRun = false; drawThread = null; } } } catch (Exception

72410

史上最全Android渲染机制讲解(长文源码深度剖析)

需要注意时候Android5.1引入了renderthread线程,可以讲draw操作从UIThread解放出来,这样做好处是,UIThread将绘制指令sync给renderthread以后可以继续执行...UIThread完成上述步骤以后会绘制指令(DisplayList)同步(sync)给RenderThread,RenderThread会真正跟GPU通信执行draw动作,systrace图示如下:.../draw具体分析就涉及到控件系统相关内容,这块内容本文不作深入分析,提一draw这个操作,使用硬件加速以后draw部分只是UIThread中收集绘制命令而已,不做真正绘制操作,该部分后续开一篇介绍硬件加速和...原因是surfaceview拥有独立surface画布(从surfaceview这个名字就能知道),所以surfaceview可以开发者自建thread中刷新,这样视频刷新就不会影响到uithread...AndroidUI 线程draw最终只负责将绘制操作转化为绘制指令(DisplayList),真正负责和GPU交互来绘制是RenderThread,flutter其实看到也是同样思路,UI线程绘制构建

3.1K11

Android开发笔记(五十六)摄像头拍照

该方法startPreview之后调用。 lock : 录像完毕对摄像头加锁。该方法stopPreview之后调用。 setDisplayOrientation : 设置预览角度。...由于拥有独立绘图表面,因此SurfaceView界面就可以一个独立线程中进行绘制,我们称之为渲染线程。因为它不占用主线程资源,所以一方面可以实现复杂而高效UI,另一方面也会及时响应用户输入。...该方法用于关联SurfaceView和SurfaceHolder,它与Camera.setPreviewDisplay最终联合完成SurfaceView与Camera关联,即摄像头画面展示预览界面上...注意SurfaceView渲染线程只surfaceCreated和surfaceDestroyed之间有效,所以如果在别处操作SurfaceView画面,得判断当前预览界面是否有效,也就是调用SurfaceHolder.isCreating...两个视图,前一个视图是预览界面,一个是扫码界面; 4、如果需要调整扫描界面的UI,则修改ViewfinderViewonDraw方法,可加入新元素或者调整尺寸。

1.7K20
领券