Sdílet prostřednictvím


Xamarin.Android TextureView

Třída TextureView je zobrazení, které používá hardwarově akcelerované 2D vykreslování k povolení zobrazení videa nebo streamu obsahu OpenGL. Například následující snímek obrazovky ukazuje TextureView zobrazení živého kanálu z fotoaparátu zařízení:

Příklad snímku obrazovky s živým obrázkem z fotoaparátu zařízení

SurfaceView Na rozdíl od třídy, která lze použít také k zobrazení OpenGL nebo video obsahu, TextureView není vykreslen do samostatného okna. TextureView Proto je možné podporovat transformace zobrazení jako jakékoli jiné zobrazení. Otočením objektu TextureView lze například dosáhnout jednoduchým nastavením jeho Rotation vlastnosti, průhlednosti nastavením jeho Alpha vlastnosti atd.

Díky tomu teď můžeme dělat věci, TextureView jako je zobrazení živého streamu z fotoaparátu a jeho transformace, jak je znázorněno v následujícím kódu:

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

Výše uvedený kód vytvoří TextureView instanci v metodě aktivity OnCreate a nastaví aktivitu jako TextureView's SurfaceTextureListener. Aby to bylo SurfaceTextureListener, aktivita implementuje TextureView.ISurfaceTextureListener rozhraní. Systém zavolá metodu OnSurfaceTextAvailable , když SurfaceTexture je připraven k použití. V této metodě vezmeme SurfaceTexture předanou a nastavíme ji na texturu náhledu fotoaparátu. Pak můžeme provádět normální operace založené na zobrazení, jako je nastavení Rotation a Alpha, jako v příkladu výše. Výsledná aplikace spuštěná na zařízení je zobrazená níže:

Příklad aplikace spuštěné na zařízení zobrazující obrázek

Aby bylo možné použít TextureViewhardwarovou akceleraci, musí být povolená, což bude ve výchozím nastavení nastaveno na úrovni rozhraní API 14. Vzhledem k tomu, že tento příklad používá kameru, musí být v AndroidManifest.xml nastavena android.permission.CAMERAoprávnění i android.hardware.camera funkce.