TextureView de Xamarin.Android
La clase TextureView
es una vista que usa la representación 2D acelerada por hardware para permitir que se muestren secuencias de contenido de OpenGL o vídeo. Por ejemplo, en la siguiente captura de pantalla TextureView
muestra una fuente en directo desde la cámara del dispositivo:
A diferencia de la clase SurfaceView
, que también se puede usar para mostrar el contenido de OpenGL o vídeo, TextureView no se representa en una ventana independiente.
Por consiguiente, TextureView
es capaz de admitir las transformaciones de vista como cualquier otra vista. Por ejemplo, la rotación de TextureView
se puede realizar simplemente estableciendo su propiedad Rotation
, su transparencia estableciendo su propiedad Alpha
, etc.
Por tanto, con TextureView
ahora podemos realizar operaciones tales como mostrar streaming en vivo desde la cámara y transformarla, como se muestra en el código siguiente:
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;
}
…
}
El código anterior crea una instancia de TextureView
en el método OnCreate
de Activity y establece Activity como SurfaceTextureListener
de TextureView
. Para ser SurfaceTextureListener
, la actividad implementa la interfaz de TextureView.ISurfaceTextureListener
. El sistema llamará al método OnSurfaceTextAvailable
cuando SurfaceTexture
esté listo para su uso. En este método, usamos la clase SurfaceTexture
que se pasa y lo establecemos en la textura de la vista previa de la cámara. Luego, podemos realizar las operaciones normales basadas en la vista, como establecer Rotation
y Alpha
, como en el ejemplo anterior. La aplicación resultante, que se ejecuta en un dispositivo, se muestra a continuación:
Para usar TextureView
, debe estar habilitada la aceleración de hardware, algo que se realizará de forma predeterminada a partir del nivel 14 de la API. Además, dado que en este ejemplo se usa la cámara, tanto el permiso android.permission.CAMERA
como la característica android.hardware.camera
deben establecerse en AndroidManifest.xml.