Xamarin.Android TextureView

Die TextureView -Klasse ist eine Ansicht, die hardwarebeschleunigtes 2D-Rendering verwendet, um die Anzeige eines Video- oder OpenGL-Inhaltsstreams zu ermöglichen. Der folgende Screenshot zeigt beispielsweise die TextureView Anzeige eines Livefeeds von der Kamera des Geräts:

Beispielfoto eines Livebilds von der Kamera des Geräts

SurfaceView Im Gegensatz zur -Klasse, die auch zum Anzeigen von OpenGL- oder Videoinhalten verwendet werden kann, wird die TextureView nicht in einem separaten Fenster gerendert. Ist daher in der Lage, TextureView Ansichtstransformationen wie jede andere Ansicht zu unterstützen. Das Rotieren eines TextureView kann beispielsweise erreicht werden, indem einfach seine Rotation Eigenschaft, seine Transparenz durch Festlegen der Alpha Eigenschaft usw. festgelegt wird.

Daher können wir mit dem TextureView jetzt z. B. einen Livestream von der Kamera anzeigen und transformieren, wie im folgenden Code gezeigt:

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

Der obige Code erstellt eine TextureView instance in der -Methode der Aktivität OnCreate und legt die Aktivität als TextureView"sSurfaceTextureListener" fest. Um die SurfaceTextureListenerzu sein, implementiert die Aktivität die TextureView.ISurfaceTextureListener -Schnittstelle. Das System ruft die OnSurfaceTextAvailable -Methode auf, wenn die SurfaceTexture einsatzbereit ist. Bei dieser Methode verwenden wir das SurfaceTexture übergebene und legen sie auf die Vorschautextur der Kamera fest. Anschließend können wir normale ansichtsbasierte Vorgänge ausführen, z. B. das Festlegen von Rotation und Alpha, wie im obigen Beispiel gezeigt. Die resultierende Anwendung, die auf einem Gerät ausgeführt wird, ist unten dargestellt:

Beispiel für die App, die auf einem Gerät ausgeführt wird und ein Bild anzeigt

Um die TextureViewHardwarebeschleunigung zu verwenden, muss die Hardwarebeschleunigung aktiviert sein. Dies ist standardmäßig ab API-Ebene 14. Da in diesem Beispiel die Kamera verwendet wird, müssen sowohl die android.permission.CAMERA Berechtigung als auch das android.hardware.camera Feature im AndroidManifest.xmlfestgelegt werden.