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

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

因此SurfaceViewUI可以一个独立线程中进行绘制。由于不会占用主线程资源,因此SurfaceView可以实现复杂而高效UI。...Android应用程序窗口需要请求SurfaceFlinger服务创建绘图表面(也就是Surface对象),同时窗口还需要被WindowManagerService管理;所以实际上窗口绘图表面是通过两个...Surface对象来描述,一个是应用程序进程创建,另一个是由WindowManagerService创建,这两个Surface对象对应于SurfaceFlinger服务同一个Layer对象。...应用程序进程这一侧,每一个应用程序窗口,如Activity,都有一个Surface对象,就是ViewRootImpl对象mSurface属性,这个Surface用来绘制应用程序窗口UI,如下ViewRootImpl...draw()方法中主要把SurfaceTexture中收到图像数据作为纹理更新到对应HardwareLayer中。

10.7K180

从零开始仿写一个抖音App——视频编辑SDK开发(二)

Android、iOS、前端、Flutter 同学一定都用过 Canvas,各自平台中 Canvas 就是一个比较上层图形图像渲染框架。 ?...可运行代码可以learning-opengl这里找到,图中代码只是关键步骤。这里也只是讲解 OpenGL 运行方式,更具体代码使用还需要读者去前面的网站中学习。...4.图中代码片段1就是通过 CPU 将 GLSL 代码编译成 GPU 指令 5.图中代码片段2是在内存中定义好数据,然后将数据拷贝到 GPU 显存中,显存中数据是以对象形式存在。...下面我们就从第二章中提到 WsMediaPlayer.draw 方法入手。...这个方法目前还不完善里面只有测试代码,因为我们目前只能播放图像,还没有播放声音,所以目前 current_time_ = current_time = GetRenderPos() 获取到时间戳,是构造测试代码

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

从零开始仿写一个抖音App——Android绘制机制以及Surface家族源码全解析

二、Android绘制机制源码分析 这一章我们来源码上分析 View 是如何绘制到屏幕上面的,前面的 measure、layout、draw 等等 framework 层东西不会着重分析,主要分析...想大家应该对这个方法很熟悉,这个方法就是调用 measure、layout、draw 方法。已经分析烂了东西这里就不说了。...图8:SurfaceTexture创建以及使用.png 将根据图8流程来讲解 ST 创建与使用 1.首先我们 ST.java 创建开始,也就是图中黄色方框。...图9:TextureView创建和使用.png 和前面一样,本小节接下来分析也都是顺着图9来 1.因为 TV 我们可以将其看成一个普通 View,所以这里我们可以直接 TV draw 方法开始分析...创建图像流转换源代码都解析完了,剩下就是 Android绘制机制 中讲那样使用 GL 进行真正绘制了。

2.8K20

UIview

例如,UILabel对象画了一个文本字符串和UIImageView对象绘制图像。 因为视图对象是主要应用程序与用户交互方式,他们有许多责任。...视图包含使用UIKit定制内容或核心图形、系统调用视图draw(_:)方法。该方法实现负责绘制视图内容到当前图形上下文,这是系统设置自动调用该方法之前。...这可以通过调用视图setNeedsDisplay()或setNeedsDisplay(_:)方法。这些方法让系统知道它应该更新视图在下一次draw时候。...因为它将等待下一个绘图周期更新视图中,您可以调用这些方法多个视图同一时间更新他们。...因此,你应该叫UIView方法代码中运行您应用程序主线程。这可能不是严格必需是唯一一次创建视图对象本身,而是所有其他操作应该发生在主线程。

69410

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

前言 渲染机制是Android操作系统很重要一环,本系列通过介绍应用启动到渲染流程,揭秘Android渲染原理。...Vsync信号 Android“黄油计划”中引入一个重要机制就是:vsync,引入vsync本质上是要协调app生成UI数据和SurfaceFlinger合成图像,app是数据生产者,surfaceflinger...App接收到vsync信号 应用程序基本架构 Android应用进程核心组成 上图列举了Android应用进程侧几个核心,PhoneWindow构建是一个非常重要过程,应用启动显示内容装载到其内部...应用启动流程图(下文称该图为P0) 进程启动 应用冷启动第一步就是要先创建进程,这跟linux类似C/C++程序是一致Android亦是通过fork来孵化应用进程,我们知道Linux fork子进程继承父进程很多资源...需要注意时候Android5.1引入了renderthread线程,可以讲draw操作UIThread解放出来,这样做好处是,UIThread将绘制指令sync给renderthread以后可以继续执行

3.2K11

2014-10-27Android学习------程序源码+知识总结------城市列表应用程序

26个字母显示特效程序时候,自定义是继承了android.view.View,需要去重载触摸事件调度函数dispatchTouchEvent()方法,在这个方法中 我们使用了:invalidate...说白了就是注意一点:invalidate不能再线程中直接使用,但是可以UI线程中直接使用,postinvalidate可以直接在线程中使用 我们应用程序是继承View,它就是一个UI线程,那么它就可以直接使用了...你只需Activity中显式地调用View对象invalidate()方法即可。系统会自动调用 ViewonDraw()方法。...这时候你需要创建一个继承了android.os.Handler子类,并重写handleMessage(Message msg)方法。...关于View机制 这里推荐一篇文章,写蛮好:Android中View绘制流程以及invalidate()等相关方法分析 2.已经存在数据库文件如何放在资源文件下,直接看图吧 调用它时候:

29330

Android 控件之TextureView

myView.setAlpha(0.5f) TextureView继承层次如下图所示: 图中可以看到,TextureView继承自View,它与其它View一样View hierachy...TextureView重载了draw()方法,其中主要把SurfaceTexture中收到图像数据作为纹理更新到对应HardwareLayer中。...SurfaceView 应用程序视频或者opengl内容往往是显示一个特别的UI控件中:SurfaceView。SurfaceView工作方式是创建一个置于应用窗口之后新窗口。...这种方式效率非常高,因为SurfaceView窗口刷新时候不需要重绘应用程序窗口(android普通窗口视图绘制机制是一层一层,任何一个子元素或者是局部刷新都会导致整个视图结构全部重绘一次,...实例 例如,下面是使用MediaPlayer和TextureView实现视频播放实例。注意TextureView中draw方法和onDraw方法都是被定义成final,不能被子类覆盖。

1.5K60

OpenGL ES编程指南(二)

storyboard加载视图后,创建一个上下文并将其设置为视图上下文属性值。 GLKit视图会自动创建和配置自己OpenGL ES帧缓冲区对象和渲染缓冲区。...,比例因子和可绘制属性(如果需要)创建帧缓冲区对象和渲染缓冲区, 将帧缓冲区对象绑定为绘图命令的当前目标 设置OpenGL ES口以匹配帧缓冲区大小 绘图方法返回后,视图: 解决多重采样缓冲区(如果启用了多重采样...您也可以单个渲染上下文中创建多个帧缓冲区对象。 您可能会这样做,以便您可以多个帧缓冲区之间共享相同渲染管线和OpenGL ES资源。...大多数情况下,配置帧缓冲区不同之处在于哪个对象连接到帧缓冲区对象颜色附着点: 要将帧缓冲区用于离屏图像处理,请附加渲染缓冲区。 请参阅创建离屏帧缓冲区对象。...多重采样使用更多内存和片段处理时间来渲染图像,但与使用其他方法相比,它可以以更低性能成本提高图像质量。 下图显示了多采样如何工作。您应用程序不会创建一个帧缓冲区对象,而是创建两个。

1.8K20

android:绘图 (android.graphics包)

Buffer dst) 将当前位图像素内容复制到一个Buffer缓冲区 我们看到创建位图对象createBitmap包含了6种方法目前Android 2.1 SDK中,当然他们使用是API Level...作为Bitmap对象I/O,BitmapFactory提供了丰富构造Bitmap对象方法,比如从一个字节数组、文件系统、资源ID、以及输入流中来创建一个Bitmap对象,下面本类全部成员,...J2ME MIDLET时我们就知道Java提供了Canvas,而目前Android平台中,它主要任务为管理绘制过程,The Canvas class holds the "draw" calls...今天我们继续介绍Android平台底层绘图相关内容,Android UI开发专题(一) 之界面设计中我们介绍了有关Android平台资源使用以及Bitmap相关操作,接下来将会以实例方式给大家演示各种类用处以及注意点...final boolean isBold() final boolean isItalic() 该类创建方法还有apk资源或从一个具体文件路径,其具体方法为 static Typeface createFromAsset

62620

重新认识Android Context

ContextAndroid系统中地位很重要,它几乎无所不能,但它也不是你想用就能随便用,谨防使用不当引起内存问题。...Android程序不像Java程序一样,随便创建一个,写个main()方法就能运行,Android应用模型是基于组件应用设计模式,组件运行要有一个完整Android工程环境,在这个环境下,Activity...它是一个抽象,它执行被Android系统所提供。它允许获取以应用为特征资源和类型,是一个统领一些资源应用程序环境变量等)上下文。...就是说,它描述一个应用程序环境信息(即上下文);是一个抽象Android提供了该抽象具体实现;通过它我们可以获取应用程序资源(包括应用级别操作,如启动Activity,发广播,接受Intent...上图中YES和NO也不再做过多解释了,这里说一下上图中Application和Service所不推荐两种使用情况。

52030

Android OpenGL ES入门

OpenGL提供了一套标准函数和接口,使开发人员能够各种操作系统上创建高性能图形应用程序,这些操作系统包括Windows、Linux、macOS和一些嵌入式系统。...娱乐和多媒体应用:通过OpenGL ES,开发者可以创建高质量娱乐和多媒体应用,包括图像和视频编辑应用,艺术创作工具等。...初始化OpenGL使用是GLSurfaceView,它可以处理OpenGL初始化过程中比较基本操作,如配置显示设备,在后台线程中渲染,渲染是显示设备中一个称为surface特定区域完成。...使用GLSurfaceView时候,我们要处理好Activity生命周期事件,Activity暂停时候要释放资源Activity恢复时候要重新恢复资源。   ...,它里面有三个方法需要实现: onSurfaceCreated:当surface被创建时候,GLSurfaceView会调用这个方法,这发生在应用程序第一次运行时候,并且当设备被唤醒或者用户其他Activity

29010

了解 Android 矢量图片格式:`VectorDrawable`

怎么创建和使用它们?在这一系列文章中,将会探讨这些问题并解释为什么在你应用中应该大量地使用矢量资源(vector assets)以及怎样最大限度地使用它们。...例如, Google I/O app 这次提交 中通过将一些 PNG 图标位图转换成矢量图,节约了 482 KB。尽管听上去不是很多,但这仅仅是对小图像而言;更大图片(如插图)会节省更多。...权衡 矢量确实也有一些需要考虑缺点: 解码 正如前面所诉,矢量图像描述了自己包含内容,因此使用前需要对它们进行 inflate 和 draw 操作。 ?...第二个 口 大小定义虚拟画布,或者定义所有后续绘制命令空间坐标。固有和口尺寸可以不同(但应该以相同比例)— 如果你需要,可以 1*1 画布中定义矢量。...阅读我们下一篇文章,了解更多信息: 即将到来: 绘制路径 即将到来: 创建Android矢量资源 即将到来: Android 应用中使用 vector assets 即将到来:分析 Android

2.5K30

利用SurfaceView实现下雨与下雪动画效果详解(Kotlin语法)

所以在在设计时候我们将draw方法设置成可以让子类复写就可以了,你不满意实现?...如果随机标识是true,那么x坐标将是0 ~ ScreenWidth中任意值。那么不是随机呢?实现中,同一Shape将会被分为两,一常量组。...流程图 其中draw(canvas)是父方法,对供外部调用方法isInUse标识位为false时对Shape进行初始化操作,具体就是调用initStyle()方法,而wtc()则会在initStyle...因为16ms一帧绘制速度就足够了,不需要绘制太快浪费资源。 这里可以看到我创建了一个JavaObject对象,主要是因为Kotlin本身对于一些并发原语支持并不好。...Kotlin中任何对象都是继承与Any,Any并没有wait、notify等方法,所以这里用了黑科技……创建了Java对象…… 代码中关键代码绘制调用了WeatherShapePooldrawRain

1.1K21

Bitmap 详解

Drawable可以不含有具体像素信息,只要它含有的信息足以draw(canvas)方法中被调用时进行绘制就够了。...2.5 由于Drawable存储只是绘制规则,因此他draw()方法被调用前,需要先调用Drawable.setBounds()来为它设置绘制边界。...所以,计算图片占用内存大小时候,要考虑图片所在目录跟设备密度,这两个因素其实影响是图片宽高,android会对图片进行拉升跟压缩 Bitmap基本加载 BitmapFactory提供了四方法用来加载...比如一个Activity会展示一些用户头像列表,而如果用户没有设置头像的话,则会显示一个默认头像,而这个头像是位于应用程序本身资源文件中。如果有类似上面的场景,就可以对同一Bitmap进行缓存。...如果不进行缓存,尽管看到是同一张图片文件,但是使用BitmapFactory方法来实例化出来Bitmap,是不同Bitmap对象。缓存可以避免新建多个Bitmap对象,避免内存浪费。

2.1K20

android SurfaceView绘制实现原理解析

ViewRoot成员函数performTraversals详细实现可以参考Android应用程序窗口(Activity)绘图表面(Surface)创建过程分析和Android窗口管理服务WindowManagerService...绘图表面创建一块内存,并且将采集预览图像数据或者视频帧数据源源不断地填充到该内存中去。...add除了会在WindowManagerService服务内部为指定窗口增加一个WindowState对象之外,还会为该窗口创建一个用来接收用户输入通道,具体可以参考Android应用程序键盘(Keyboard...前面我们已经假设了参数child所描述SurfaceView是直接嵌入宿主窗口顶层视图中,而窗口顶层视图父视图是使用一个ViewRoot对象来描述,也就是说,当前正在处理视图容器成员变量...从前面Android应用程序窗口(Activity)测量(Measure)、布局(Layout)和绘制(Draw)过程分析一文可以知道,窗口绘制过程中,每一个子视图成员函数draw或者dispatchDraw

5.5K131

Context都没弄明白,还怎么做Android开发?

Android程序不像Java程序一样,随便创建一个,写个main()方法就能运行,Android应用模型是基于组件应用设计模式,组件运行要有一个完整Android工程环境,在这个环境下,Activity...它是一个抽象,它执行被Android系统所提供。它允许获取以应用为特征资源和类型,是一个统领一些资源应用程序环境变量等)上下文。...就是说,它描述一个应用程序环境信息(即上下文);是一个抽象Android提供了该抽象具体实现;通过它我们可以获取应用程序资源(包括应用级别操作,如启动Activity,发广播,接受Intent...上面的关系图也另外一个侧面告诉我们Context整个Android系统中地位是多么崇高,因为很显然Activity,Service,Application都是其子类,其地位和作用不言而喻。...上图中YES和NO也不再做过多解释了,这里说一下上图中Application和Service所不推荐两种使用情况。

78840

Context都没弄明白,还怎么做Android开发?

Android程序不像Java程序一样,随便创建一个,写个main()方法就能运行,Android应用模型是基于组件应用设计模式,组件运行要有一个完整Android工程环境,在这个环境下,Activity...它是一个抽象,它执行被Android系统所提供。它允许获取以应用为特征资源和类型,是一个统领一些资源应用程序环境变量等)上下文。...就是说,它描述一个应用程序环境信息(即上下文);是一个抽象Android提供了该抽象具体实现;通过它我们可以获取应用程序资源(包括应用级别操作,如启动Activity,发广播,接受Intent...上面的关系图也另外一个侧面告诉我们Context整个Android系统中地位是多么崇高,因为很显然Activity,Service,Application都是其子类,其地位和作用不言而喻。...上图中YES和NO也不再做过多解释了,这里说一下上图中Application和Service所不推荐两种使用情况。

33120

[干货]让你彻底搞懂 Context 到底是什么,如果没弄明白,还怎么做 Android 开发?

Android程序不像Java程序一样,随便创建一个,写个main()方法就能运行,Android应用模型是基于组件应用设计模式,组件运行要有一个完整Android工程环境,在这个环境下,Activity...它是一个抽象,它执行被Android系统所提供。它允许获取以应用为特征资源和类型,是一个统领一些资源应用程序环境变量等)上下文。...就是说,它描述一个应用程序环境信息(即上下文);是一个抽象Android提供了该抽象具体实现;通过它我们可以获取应用程序资源(包括应用级别操作,如启动Activity,发广播,接受Intent...上面的关系图也另外一个侧面告诉我们Context整个Android系统中地位是多么崇高,因为很显然Activity,Service,Application都是其子类,其地位和作用不言而喻。...上图中YES和NO也不再做过多解释了,这里说一下上图中Application和Service所不推荐两种使用情况。

97620
领券