区别与联系

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更加适合。


参考链接:

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

  1. android view surfaceView GLSurfaceView

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 表面视图 SurfaceView 是 视图 的子类, 刷新界面速度比 视图 块, 因为它 ...

  2. Android之View / SurfaceView / GLSurfaceView

    Android游戏当中主要的除了控制类外就是显示类View.SurfaceView是从View基类中派生出来的显示类.android游戏开发中常用的三种视图是:view.SurfaceView和GLS ...

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

    Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...

  4. Android使用SurfaceView实现墨迹天气的风车效果

    SurfaceView也是继承自View,它和我们以前接触到的View(Button.TextView等)最大的不同是,SurfaceView可以有一个单独的线程进行绘制,这个线程区别于UI线程(主线 ...

  5. Android之SurfaceView

    SurfaceView也是继承了View,但是我们并不需要去实现它的draw方法来绘制自己,为什么呢? 因为它和View有一个很大的区别,View在UI线程去更新自己:而SurfaceView则在一个 ...

  6. android View 继承关系

    二. View  SurfaceView  GLSurfaceView   View SurfaceView GLSurfaceView 功能 显示视图,内置画布,提供图形绘制函数.触屏事件.按键事件 ...

  7. Android视图SurfaceView的实现原理分析(示例,出错代码)

    在Android系统中,有一种特殊的视图,称为SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享同一个绘图表面.由于拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独 ...

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

    1.背景介绍 最近项目要绘制股票走势图,并绘制能够跟随手指滑动的指示线(Indicator)来精确查看股票价格和日期.如下图所示: 上图中的那条白色直线就是股票的指示线,用来跟随手指精确确定股票的时间 ...

  9. Android 之surfaceView (画动态圆圈)

      通过之前介绍的如何自定义View, 我们知道使用它可以做一些简单的动画效果.它通过不断循环的执行View.onDraw方法,每次执行都对内部显示的图形做一些调整,我们假设 onDraw方法每秒执行 ...

随机推荐

  1. Django之小结

    常用的函数方法与包的调用 # 登陆视图函数 def login(request): if request.method == 'GET': return render(request,'login.h ...

  2. sql的时间格式

    sql中的时间格式转换主要有:date_format函数,str_to_date函数 1. 首先选择一个数据库 use db_name; 2. 显示当前时区的时间: SELECT NOW(); 3. ...

  3. 某个Spring Cloud分布式架构

  4. TIME_WAIT状态全是3306解决办法

    刚吃完晚饭,手机短信一直响个不停,打开一看全是告警信息,立即打开电脑查看,发现很多网页很不稳定  一会能打开,一会打不开 登录服务器查看负载情况,cpu.内存 .磁盘io 负载都不高,查看日志发现ng ...

  5. MyBatis3_[tp_41-42-43]-_动态sql_trim_自定义字符串截取_choose分支选择_update的set与if-trim 结合的动态更新

    笔记要点出错分析与总结 /** 笔记: * 查询的时候,如果某些条件,没带可能SQL拼装会有问题; * 1.-->给where 后面加上 1=1, 以后的条件都and XXX * 2. < ...

  6. python学习之正则表达式,StringIO模块,异常处理,搭建测试环境

    python正则表达式 引入一个强大的匹配功能来匹配字符串 import re 正则表达式的表示类型raw string类型(原生字符串类型) r'sa\\/sad/asd'用r转为raw strin ...

  7. idea启动springboot项目报Error running 'ServiceStarter': Command line is too long. Shorten command line for ServiceStarter or also for Application

    解决办法:在.idea文件夹下面的workspace.xml中的 <component name="PropertiesComponent">标签下面添加: <p ...

  8. idea在src/main/java下新建包后项目中只显示src/main,后面的东西不显示,但在本地磁盘中是存在的

    去掉图中的勾

  9. LeetCode 339. Nested List Weight Sum

    原题链接在这里:https://leetcode.com/problems/nested-list-weight-sum/ 题目: Given a nested list of integers, r ...

  10. myeclipse2018大括号之前会自动加空格