Surfaceview和TextureView有什么区别?

时间:2013-06-04 11:40:42

标签: android surfaceview

我一直在研究Android特别是View系统。 我有一个问题,但我母语中没有文件或参考文献。所以我想知道你们。

5 个答案:

答案 0 :(得分:14)

<强> TextureView

TextureView可用于显示内容流。这样的内容流可以例如是视频或OpenGL场景。

示例:
https://github.com/dalinaum/TextureViewDemo

文献:
http://developer.android.com/reference/android/view/TextureView.html

<强> SurfaceView

提供嵌入视图层次结构内的专用绘图表面。

例子:
http://www.mindfiresolutions.com/Using-Surface-View-for-Android-1659.php
http://blog.wisecells.com/2012/06/04/surface-view-android/

文献:
http://developer.android.com/reference/android/view/SurfaceView.html

答案 1 :(得分:5)

SurfaceViewTextureView都继承自android.view.View类。 但是它们之间存在一些结构性差异。

如果您想要更多地控制单个绘图板,请转到SurfaceView

  • 您无法覆盖两个SurfaceView
TextureView相比,

SurfaceView具有以下优势:

  • 您可以动画,变换和缩放TextureView

答案 2 :(得分:1)

  

除了其他答案外,这对于新手android开发人员或将看到此内容的任何人可能都是有益的。

就我而言,在OnCreate方法中使用此代码段有助于我找出哪些设备可以使用SurfaceView

    if (
            GLES20.glGetString(GLES20.GL_RENDERER) == null ||
                    GLES20.glGetString(GLES20.GL_VENDOR) == null ||
                    GLES20.glGetString(GLES20.GL_VERSION) == null ||
                    GLES20.glGetString(GLES20.GL_EXTENSIONS) == null ||
                    GLES10.glGetString(GLES10.GL_RENDERER) == null ||
                    GLES10.glGetString(GLES10.GL_VENDOR) == null ||
                    GLES10.glGetString(GLES10.GL_VERSION) == null ||
                    GLES10.glGetString(GLES10.GL_EXTENSIONS) == null) {
        // try to use SurfaceView
    } else {
        // try to use TextureView
    }
  

希望它可以帮助开发视频播放器应用程序的人:)

答案 3 :(得分:0)

SurfaceviewTextureView 可用于从另一个线程

Surfaceview

  • 与 UI 元素结合使用时性能更好
  • 更少的内存

TextureView

  • API 14
  • 不会创建单独的窗口(与 Surfaceview 不同),这就是为什么 alpha、旋转、移动、变换、动画效果更好
  • 用于硬件加速模式

答案 4 :(得分:0)

SurfaceView 采用与其他视图相同的参数,但 SurfaceView 内容在渲染时是透明的。

TextureView 比 SurfaceView 具有更好的 alpha 和旋转处理,但 SurfaceView 在合成分层视频的 UI 元素时具有性能优势。

更多:https://source.android.com/devices/graphics/arch-tv