web-dev-qa-db-fra.com

Quelles sont les différences entre Surfaceview et TextureView?

J'ai étudié Android en particulier le système View. J'ai une question sur les différences entre eux mais il n'y a pas de documents ou de références dans ma langue maternelle. Je veux donc savoir de vous les gars.

30
Won Chul Jo

TextureView

Une TextureView peut être utilisée pour afficher un flux de contenu. Un tel flux de contenu peut par exemple être une vidéo ou une scène OpenGL.

Exemple :
https://github.com/dalinaum/TextureViewDemo

Document:
http://developer.Android.com/reference/Android/view/TextureView.html

SurfaceView

Fournit une surface de dessin dédiée intégrée à l'intérieur d'une hiérarchie de vues.

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

Document:
http://developer.Android.com/reference/Android/view/SurfaceView.html

14
Chintan Rathod

SurfaceView et TextureView sont tous deux hérités de la classe Android.view.View. Cependant, il existe certaines différences structurelles entre eux.

Lorsque vous voulez plus de contrôle sur la planche à dessin unique, optez pour SurfaceView

  • Vous ne pouvez pas superposer deux SurfaceView.

TextureView présente les avantages suivants par rapport à SurfaceView:

  • Vous pouvez animer, transformer et mettre à l'échelle un TextureView.
5
Abhinav Jordiie Das

En plus d'autres réponses, cela pourrait être bénéfique pour les débutants Android ou toute personne qui verra cela.

Dans mon cas, l'utilisation de cet extrait dans la méthode OnCreate m'a aidé à savoir quel appareil peut utiliser 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
    }

J'espère que cela aide les gens qui développent des applications de lecteur vidéo :)

2
MilaDroid