Freigeben über


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 z. B. 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. Daher ist es in der Lage, TextureView Ansichtstransformationen wie jede andere Ansicht zu unterstützen. Beispielsweise kann das Drehen eines Objekts TextureView durch einfaches Festlegen seiner Rotation Eigenschaft, seiner Transparenz durch Festlegen seiner Alpha Eigenschaft usw. erreicht werden.

Daher können wir mit der TextureView jetzt dinge wie das Anzeigen eines Livestreams von der Kamera ausführen 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 Instanz in der Aktivitätsmethode OnCreate und legt die Aktivität als " TextureViews SurfaceTextureListener" fest. Um dies SurfaceTextureListenerzu sein, implementiert die Aktivität die TextureView.ISurfaceTextureListener Schnittstelle. Das System ruft die OnSurfaceTextAvailable Methode auf, wenn die SurfaceTexture Anwendung bereit ist. In dieser Methode nehmen 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. festlegen, wie RotationAlphaim obigen Beispiel. Die resultierende Anwendung, die auf einem Gerät ausgeführt wird, wird unten angezeigt:

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

Um die TextureViewHardwarebeschleunigung zu verwenden, muss diese standardmäßig als API-Ebene 14 aktiviert sein. 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.xml festgelegt werden.