Condividi tramite


Xamarin.Android TextureView

La TextureView classe è una visualizzazione che usa il rendering 2D accelerato dall'hardware per consentire la visualizzazione di un flusso di contenuto Video o OpenGL. Ad esempio, lo screenshot seguente mostra la TextureView visualizzazione di un feed live dalla fotocamera del dispositivo:

Screenshot di esempio di un'immagine live dalla fotocamera del dispositivo

A differenza della SurfaceView classe , che può essere usata anche per visualizzare contenuto OpenGL o video, il rendering di TextureView non viene eseguito in una finestra separata. Pertanto, TextureView è in grado di supportare trasformazioni di visualizzazione come qualsiasi altra visualizzazione. Ad esempio, la rotazione di un TextureView oggetto può essere eseguita impostando semplicemente la relativa Rotation proprietà, la relativa trasparenza impostandone la Alpha proprietà e così via.

Pertanto, con è TextureView ora possibile eseguire operazioni come visualizzare un flusso live dalla fotocamera e trasformarlo, come illustrato nel codice seguente:

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;
    }
    …
}

Il codice precedente crea un'istanza TextureView nel metodo dell'attività OnCreate e imposta l'attività come .TextureViewSurfaceTextureListener Per essere , SurfaceTextureListenerl'attività implementa l'interfaccia TextureView.ISurfaceTextureListener . Il sistema chiamerà il OnSurfaceTextAvailable metodo quando SurfaceTexture è pronto per l'uso. In questo metodo, prendiamo l'oggetto SurfaceTexture passato e lo impostiamo sulla trama di anteprima della fotocamera. È quindi possibile eseguire normali operazioni basate sulla visualizzazione, ad esempio l'impostazione di Rotation e Alpha, come nell'esempio precedente. L'applicazione risultante, in esecuzione in un dispositivo, è illustrata di seguito:

Esempio dell'app in esecuzione in un dispositivo, che visualizza un'immagine

Per usare , è necessario abilitare l'accelerazione TextureViewhardware, che sarà per impostazione predefinita a livello API 14. Inoltre, poiché questo esempio usa la fotocamera, sia l'autorizzazione android.permission.CAMERA che la android.hardware.camera funzionalità devono essere impostate nella AndroidManifest.xml.