web-dev-qa-db-ja.com

SurfaceviewとTextureViewの違いは何ですか?

私は勉強してきましたAndroid特にViewシステム。質問には違いがありますが、母国語でのドキュメントや参照はありません。だから皆さんから知りたいです。

30
Won Chul Jo

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

14
Chintan Rathod

SurfaceViewTextureViewは両方ともAndroid.view.Viewクラスから継承されます。ただし、それらの間には構造的な違いがあります。

単一の描画ボードをさらに制御したい場合は、SurfaceViewを選択します

  • 2つのSurfaceViewをオーバーレイすることはできません。

TextureViewには、SurfaceViewよりも次の利点があります。

  • TextureViewをアニメート、変換、スケーリングできます。
5

他の答えに加えて、これは初心者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
    }

ビデオプレーヤーアプリを開発する人々に役立つことを願っています:)

2
MilaDroid