Partager via


Xamarin.Android TextureView

La TextureView classe est une vue qui utilise le rendu 2D à accélération matérielle pour permettre l’affichage d’un flux de contenu vidéo ou OpenGL. Par exemple, la capture d’écran suivante montre l’affichage TextureView d’un flux en direct à partir de l’appareil photo de l’appareil :

Exemple de capture d’écran d’une image en direct à partir de la caméra de l’appareil

Contrairement à la classe, qui peut également être utilisée pour afficher du SurfaceView contenu OpenGL ou vidéo, TextureView n’est pas rendu dans une fenêtre distincte. Par conséquent, TextureView il est en mesure de prendre en charge les transformations d’affichage comme n’importe quelle autre vue. Par exemple, la rotation d’un peut TextureView être effectuée en définissant simplement sa Rotation propriété, sa transparence en définissant sa Alpha propriété, et ainsi de suite.

Par conséquent, avec le TextureView code suivant, nous pouvons désormais effectuer des opérations telles que l’affichage d’un flux en direct à partir de l’appareil photo et la transformer :

public class TextureViewActivity : Activity,
    TextureView.ISurfaceTextureListener
{
    Camera _camera;
    TextureView _textureView;

    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);
        _textureView = new TextureView (this);
        _textureView.SurfaceTextureListener = this;

        SetContentView (_textureView);
    }

    public void OnSurfaceTextureAvailable (
        Android.Graphics.SurfaceTexture surface,
        int width, int height)
    {
        _camera = Camera.Open ();
        var previewSize = _camera.GetParameters ().PreviewSize;
        _textureView.LayoutParameters =
            new FrameLayout.LayoutParams (previewSize.Width,
                previewSize.Height, (int)GravityFlags.Center);

        try {
            _camera.SetPreviewTexture (surface);
            _camera.StartPreview ();
        } catch (Java.IO.IOException ex) {
            Console.WriteLine (ex.Message);
        }

        // this is the sort of thing TextureView enables
        _textureView.Rotation = 45.0f;
        _textureView.Alpha = 0.5f;
    }
    …
}

Le code ci-dessus crée une TextureView instance dans la méthode de l’activité OnCreate et définit l’activité comme étant le TextureView« .SurfaceTextureListener Pour être le SurfaceTextureListener, l’activité implémente l’interface TextureView.ISurfaceTextureListener . Le système appelle la OnSurfaceTextAvailable méthode lorsque le SurfaceTexture système est prêt à être utilisé. Dans cette méthode, nous prenons l’élément SurfaceTexture passé et nous le définissons sur la texture d’aperçu de l’appareil photo. Ensuite, nous sommes libres d’effectuer des opérations normales basées sur la vue, telles que la définition du Rotation et Alpha, comme dans l’exemple ci-dessus. L’application résultante, en cours d’exécution sur un appareil, est illustrée ci-dessous :

Exemple d’application s’exécutant sur un appareil, affichant une image

Pour utiliser le , l’accélération TextureViewmatérielle doit être activée, ce qui sera par défaut au niveau de l’API 14. En outre, étant donné que cet exemple utilise l’appareil photo, l’autorisation android.permission.CAMERA et la android.hardware.camera fonctionnalité doivent être définies dans la AndroidManifest.xml.