Bagikan melalui


Xamarin.Android TextureView

Kelas TextureView adalah tampilan yang menggunakan penyajian 2D yang dipercepat perangkat keras untuk memungkinkan video atau aliran konten OpenGL ditampilkan. Misalnya, cuplikan layar berikut menunjukkan TextureView tampilan umpan langsung dari kamera perangkat:

Contoh cuplikan layar gambar langsung dari kamera perangkat

SurfaceView Tidak seperti kelas , yang juga dapat digunakan untuk menampilkan konten OpenGL atau video, TextureView tidak dirender ke jendela terpisah. Oleh karena itu, TextureView mampu mendukung transformasi tampilan seperti tampilan lainnya. Misalnya, memutar TextureView dapat dicapai hanya dengan mengatur propertinya Rotation , transparansinya dengan mengatur propertinya, dan sebagainya Alpha .

Oleh karena itu, dengan kita sekarang dapat melakukan hal-hal seperti menampilkan streaming langsung dari kamera dan mengubahnya, seperti yang TextureView ditunjukkan dalam kode berikut:

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

Kode di atas membuat instans TextureView dalam metode Aktivitas OnCreate dan menetapkan Aktivitas sebagai TextureView.SurfaceTextureListener Untuk menjadi SurfaceTextureListener, Aktivitas mengimplementasikan TextureView.ISurfaceTextureListener antarmuka. Sistem akan memanggil OnSurfaceTextAvailable metode ketika SurfaceTexture siap digunakan. Dalam metode ini, kita mengambil SurfaceTexture yang diteruskan dan mengaturnya ke tekstur pratinjau kamera. Kemudian kita bebas melakukan operasi berbasis tampilan normal, seperti mengatur Rotation dan Alpha, seperti pada contoh di atas. Aplikasi yang dihasilkan, berjalan pada perangkat, ditunjukkan di bawah ini:

Contoh aplikasi yang berjalan di perangkat, menampilkan gambar

Untuk menggunakan TextureView, akselerasi perangkat keras harus diaktifkan, yang akan secara default pada API Level 14. Selain itu, karena contoh ini menggunakan kamera, izin android.permission.CAMERA dan android.hardware.camera fitur harus diatur dalam AndroidManifest.xml.