android: View, SurfaceView, GLSurfaceView, TextureView 区别与联系

区别与联系

View: 显示视图,内置画布,提供了图形绘制函数、触屏事件、按键事件函数等,必须在UI主线程内更新画面,速度较慢;

SurfaceView: 基于view视图进行拓展的视图类,更适合2D游戏的开发,是view的子类,使用了双缓冲机制,即:允许在子线程中更新画面,所以刷新界面速度比view快。

GLSurfaceView: 基于SurfaceView视图再次进行拓展的视图类,在SurfaceView基础上封装了EGL环境管理以及render线程,专用于3D游戏开发的视图。是SurfaceView的子类,openGL专用。

TextrueView: 前面的SurfaceView的工作方式是创建一个置于应用窗口之后的新窗口,脱离了Android的普通窗口,因此无法对其应用变换操作(平移、缩放、旋转等),而TextureView则解决了此问题,Android4.0引入。

PS: UI线程(即主线程)中更新画面有时可能会引发问题,比如你需要更新画面的时间过长,那么UI线程会被你正在画的函数阻塞,那么将无法响应按键,触屏等消息。而SurfaceView 系的API由于是在新的线程中更新画面所以不会阻塞你的UI线程。但这也带来了另外一个问题,就是事件同步,涉及到线程同步。

应用场景:

以游戏举例:

1 被动更新画面的。比如棋类,这种用View就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。 在这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。

2 主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要SurfaceView来控制。

3.对于一些3D游戏来说,为了追求极致的性能和帧率,可以使用GLSurfaceView。其本身就封装了一些OpenGL ES的API, 通过着色器可以达到很多View难以达到的效果。

4.SurfaceView窗口刷新的时候不需要重绘应用程序的窗口(android普通窗口的视图绘制机制是一层一层的,任何一个子元素或者是局部的刷新都会导致整个视图结构全部重绘一次,因此效率非常低下,不过满足普通应用界面的需求还是绰绰有余),但是SurfaceView也有一些非常不便的限制。因为SurfaceView的内容不在应用窗口上,所以不能使用变换(平移、缩放、旋转等),所以如果是对于视频播放器或者相机应用的开发,TextureView更加适合。

参考链接:

1.textureView的两种使用场景

2.android View SurfaceView GLSurfaceView的关系和区别

3.Android 中View, SurfaceView的绘图与GLSurfaceView绘图有区别么?

4.Android中TextureView与SurfaceView用法区别

原文地址:https://www.cnblogs.com/yongdaimi/p/10967902.html

时间: 2024-08-06 03:54:13

android: View, SurfaceView, GLSurfaceView, TextureView 区别与联系的相关文章

Android之View / SurfaceView / GLSurfaceView

Android游戏当中主要的除了控制类外就是显示类View.SurfaceView是从View基类中派生出来的显示类.android游戏开发中常用的三种视图是:view.SurfaceView和GLSurfaceView. View:显示视图,内置画布,提供图形绘制函数.触屏事件.按键事件函数等:必须在UI主线程内更新画面,速度较慢. SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发:是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view

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

Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于TextureView.Surfaceview.SurfaceTexture.GLSurfaceView的关系,待咱家推出GLSurfaceview预览Camera后再专门分析.本文主要介绍使用TextureView预览Camera. 其实关于如何用TextureView预览Camera,官网已经给出了de

Android视图SurfaceView的实现原理分析

附:Android控件TextView的实现原理分析 来源:http://blog.csdn.net/luoshengyang/article/details/8661317 在Android系统中,有一种特殊的视图,称为SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享同一个绘图表面.由于拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独立的线程中进行绘制.又由于不会占用主线程资源,SurfaceView一方面可以实现复杂而高效的UI,另一方面又不会导致用户输

Android: 利用SurfaceView绘制股票滑动直线解决延迟问题

1.背景介绍 最近项目要绘制股票走势图,并绘制能够跟随手指滑动的指示线(Indicator)来精确查看股票价格和日期.如下图所示: 上图中的那条白色直线就是股票的指示线,用来跟随手指精确确定股票的时间和股票价格.不论是绘制股票图还是绘制指示线,我们首先想到的就是用Android中的自定义View来实现.实践证明,使用View能够很好地实现静态的图片,但是对用动态图像的绘制,往往会出现延迟的现象.就如上图的指示线,实际用View类实现的,跟随手指移动时,指示线就会出现延迟的现象,严重影响了用户体验

能够在子线程绘画的View SurfaceView

转载请注明出处:王亟亟的大牛之路 近期两天都没有写文章,一方面是自己在看书.一方面不知道写什么,本来昨天想写Glide或者RxAndroid的东西结果公司的"狗屎"网怎么都刷不好Gradle我也是无语了(FQ也没用).准备今天背着笔记本 回家搞.真是服了.. 抱怨的话不说了,来看下这一篇要讲的主角 SurfaceView,关于SurfaceView的文章事实上在别的一些网站上也有,由于我之前没写过,所以也就一直没整这部分的内容(别人写的好坏反正找好的点自己吸收吧,嘿嘿) 问题:Surf

view+SurfaceView实现条码扫描效果

效果图: 上半部分为一个显示摄像头拍摄到的情景的窗口及一条来回循环移动的线条,下半部分为一个无功能的Btn 布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" androi

可以在子线程绘画的View SurfaceView

转载请注明出处:王亟亟的大牛之路 最近两天都没有写文章,一方面是自己在看书,一方面不知道写什么,本来昨天想写Glide或者RxAndroid的东西结果公司的"狗屎"网怎么都刷不好Gradle我也是无语了(翻墙也没用),准备今天背着笔记本 回家搞,真是服了.. 抱怨的话不说了,来看下这一篇要讲的主角 SurfaceView,关于SurfaceView的文章其实在别的一些站点上也有,因为我之前没写过,所以也就一直没整这部分的内容(别人写的好坏反正找好的点自己吸收吧,嘿嘿) 问题:Surfa

Android Camera+SurfaceView实现自定义拍照

对Activity强制横屏,保证预览方向正确.使用OrientationEventListener监听设备方向,判断竖拍时,旋转照片后再保存,保证竖拍时预览图片和保存后的图片方向一致. 运行效果:                       代码: TestCameraActivity.java package com.example.testcamera; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream

Android之SurfaceView学习(一)转转

Android之SurfaceView学习(一) 首先我们先来看下官方API对SurfaceView的介绍 SurfaceView的API介绍 Provides a dedicated drawing surface embedded inside of a view hierarchy. You can control the format of this surface and, if you like, its size; the SurfaceView takes care of pla