一直在研究Android尤其是View系统。 我对它们之间的差异有疑问,但没有我母语的文件或参考资料。所以我想从你们那里知道。
TextureView
TextureView 可用于显示内容流。这样的内容流可以是视频或 OpenGL 场景。
例子:
https://github.com/dalinaum/TextureViewDemo
文件:
http://developer.android.com/reference/android/view/TextureView.html
表面视图
提供嵌入在视图层次结构中的专用绘图表面。
例子:
http://www.mindfiresolutions.com/Using-Surface-View-for-Android-1659.php
http://blog.wiscells.com/2012/06/04/surface-view-android/
文件:
http://developer.android.com/reference/android/view/SurfaceView.html
SurfaceView
和TextureView
都是继承自android.view.View类。
然而,它们之间存在一些结构差异。
当你想要更多地控制单个绘图板时,去
SurfaceView
SurfaceView
.TextureView
相对于SurfaceView
有以下优点:
TextureView
.除了其他答案,这可能对新手 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
}
希望对开发视频播放器应用的人有所帮助:)
谈到视频播放,
SurfaceView
而不是 TextureView
。有一些重要的区别:
MediaCodec 解码器从 Surface 请求缓冲区,传递 作为参数的视频尺寸。 Surface 提供缓冲区 一个匹配的大小,这意味着视频数据将完全覆盖 表面。结果,没有必要使用 SurfaceHolder#setFixedSize() 设置尺寸。五金件 缩放器将缩放视频以匹配视图大小,所以如果我们想 保留我们需要调整视图布局的正确纵横比。 为此,我们可以使用自定义的 AspectFrameLayout。实际上 视频的播放——将帧发送到 Surface——是一样的 用于 TextureView 和 SurfaceView。
通读 Choosing a surface type section in exoplayer documentation for further.
SurfaceView 采用与其他视图相同的参数,但 SurfaceView 内容在呈现时是透明的。
TextureView 比 SurfaceView 具有更好的 alpha 和旋转处理,但 SurfaceView 在合成分层在视频上的 UI 元素时具有性能优势。
Android SurfaceView 与 TextureView
SurfaceView
和 TextureView
可用于从另一个线程
Surfaceview
TextureView