Поделиться через


Xamarin.Android TextureView

Класс TextureView — это представление, использующее отрисовку с аппаратным ускорением 2D для отображения видео или потока содержимого OpenGL. Например, на следующем снимке экрана показан TextureView динамический веб-канал с камеры устройства:

Пример снимка экрана динамического изображения с камеры устройства

В отличие от класса, который также можно использовать для отображения содержимого SurfaceView OpenGL или видео, ТекстураView не отображается в отдельном окне. Таким образом, TextureView можно поддерживать преобразования представлений, как и любое другое представление. Например, поворот можно выполнить, просто задав TextureView его Rotation свойство, прозрачность, задав его Alpha свойство и т. д.

Таким образом, теперь TextureView мы можем выполнять такие действия, как отображение потоковой трансляции с камеры и его преобразование, как показано в следующем коде:

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

Приведенный TextureView выше код создает экземпляр в методе действия OnCreate и задает действие как TextureView"s SurfaceTextureListener". Для этого SurfaceTextureListenerдействие реализует TextureView.ISurfaceTextureListener интерфейс. Система вызовет OnSurfaceTextAvailable метод, когда SurfaceTexture он готов к использованию. В этом методе мы принимаем переданные SurfaceTexture и устанавливаем его на текстуру предварительного просмотра камеры. Затем мы можем выполнять обычные операции на основе представления, такие как установка Rotation и Alpha, как в приведенном выше примере. Результирующее приложение, работающее на устройстве, показано ниже:

Пример приложения, работающего на устройстве, отображение изображения

Чтобы использовать аппаратное TextureViewускорение, необходимо включить аппаратное ускорение, которое по умолчанию будет использоваться на уровне API 14. Кроме того, так как в этом примере используется камера, android.permission.CAMERA необходимо задать разрешение и android.hardware.camera функцию в AndroidManifest.xml.