共用方式為


Xamarin.Android TextureView

類別 TextureView 是使用硬體加速的 2D 轉譯來顯示視訊或 OpenGL 內容數據流的檢視。 例如,下列螢幕快照顯示 TextureView 顯示來自裝置相機的即時摘要:

裝置相機中即時影像的範例螢幕快照

SurfaceView不同於類別,它也可以用來顯示 OpenGL 或視訊內容,TextureView 不會轉譯成不同的視窗。 因此, TextureView 能夠像任何其他檢視一樣支持檢視轉換。 例如,旋轉 TextureView 可以藉由直接設定其 屬性、設定其 RotationAlpha 屬性的透明度等來完成。

因此,現在 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 Activity OnCreate 方法中建立實體,並將 Activity 設定為 TextureViewSurfaceTextureListener。 若要成為 SurfaceTextureListener,活動會實作 TextureView.ISurfaceTextureListener 介面。 系統會在準備好使用 時SurfaceTexture呼叫 OnSurfaceTextAvailable 方法。 在此方法中,我們會採用 SurfaceTexture 傳入的 ,並將它設定為相機的預覽紋理。 然後,我們可以自由執行一般檢視型作業,例如設定 RotationAlpha,如上述範例所示。 在裝置上執行的結果應用程式如下所示:

在裝置上執行的應用程式範例,顯示影像

若要使用 TextureView,必須啟用硬體加速,其預設會是 API 層級 14。 此外,由於此範例會使用相機,android.permission.CAMERA因此許可權和android.hardware.camera功能都必須在 AndroidManifest.xml設定。