Udostępnij za pośrednictwem


Xamarin.Android TextureView

Klasa TextureView jest widokiem, który używa przyspieszonego sprzętowo renderowania 2D, aby umożliwić wyświetlanie strumienia zawartości wideo lub OpenGL. Na przykład poniższy zrzut ekranu przedstawia wyświetlanie kanału TextureView informacyjnego na żywo z aparatu urządzenia:

Przykładowy zrzut ekranu przedstawiający obraz na żywo z aparatu urządzenia

SurfaceView W przeciwieństwie do klasy, która może być również używana do wyświetlania zawartości OpenGL lub wideo, element TextureView nie jest renderowany w osobnym oknie. TextureView W związku z tym jest w stanie obsługiwać przekształcenia widoku, takie jak każdy inny widok. Na przykład obracanie elementu TextureView można wykonać, ustawiając jego Rotation właściwość, jej przezroczystość, ustawiając jej Alpha właściwość itd.

W związku z tym TextureView możemy teraz wykonywać takie czynności jak wyświetlanie strumienia na żywo z aparatu i przekształcanie go, jak pokazano w poniższym kodzie:

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

Powyższy kod tworzy TextureView wystąpienie w metodzie Działania OnCreate i ustawia działanie jako TextureViewwartość .SurfaceTextureListener Aby być elementem SurfaceTextureListener, działanie implementuje TextureView.ISurfaceTextureListener interfejs. System wywoła metodę OnSurfaceTextAvailable , gdy SurfaceTexture element jest gotowy do użycia. W tej metodzie bierzemy przekazany element SurfaceTexture i ustawiamy go na teksturę podglądu aparatu. Następnie możemy wykonywać normalne operacje oparte na widoku, takie jak ustawienie Rotation i Alpha, jak w powyższym przykładzie. Wynikowa aplikacja uruchomiona na urządzeniu jest pokazana poniżej:

Przykład aplikacji uruchomionej na urządzeniu z wyświetlonym obrazem

Aby można było używać TextureView, należy włączyć przyspieszanie sprzętowe, które będzie domyślnie włączone jako poziom 14 interfejsu API. Ponadto, ponieważ w tym przykładzie użyto aparatu, zarówno uprawnienie, jak android.permission.CAMERA i android.hardware.camera funkcję należy ustawić w AndroidManifest.xml.