Xamarin.Android TextureView
類別 TextureView
是使用硬體加速的 2D 轉譯來顯示視訊或 OpenGL 內容數據流的檢視。 例如,下列螢幕快照顯示 TextureView
顯示來自裝置相機的即時摘要:
SurfaceView
不同於類別,它也可以用來顯示 OpenGL 或視訊內容,TextureView 不會轉譯成不同的視窗。
因此, 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
Activity OnCreate
方法中建立實體,並將 Activity 設定為 TextureView
的 SurfaceTextureListener
。 若要成為 SurfaceTextureListener
,活動會實作 TextureView.ISurfaceTextureListener
介面。 系統會在準備好使用 時SurfaceTexture
呼叫 OnSurfaceTextAvailable
方法。 在此方法中,我們會採用 SurfaceTexture
傳入的 ,並將它設定為相機的預覽紋理。 然後,我們可以自由執行一般檢視型作業,例如設定 Rotation
和 Alpha
,如上述範例所示。 在裝置上執行的結果應用程式如下所示:
若要使用 TextureView
,必須啟用硬體加速,其預設會是 API 層級 14。 此外,由於此範例會使用相機,android.permission.CAMERA
因此許可權和android.hardware.camera
功能都必須在 AndroidManifest.xml中設定。