using Android.Content; using Android.Hardware; using Demo.Droid.Controls; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(Demo.Controls.CameraPreview), typeof(CameraPreviewRenderer))] namespace Demo.Droid.Controls { public class CameraPreviewRenderer : ViewRenderer { private CameraPreview cameraPreview; public CameraPreviewRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs e) { base.OnElementChanged(e); if (e.NewElement != null) { if (Control == null) { cameraPreview = new CameraPreview(Context); SetNativeControl(cameraPreview); } var camera = Camera.Open((int)e.NewElement.Camera); var parameters = camera.GetParameters(); var width = parameters.PreviewSize.Width; var height = parameters.PreviewSize.Height; var format = parameters.PreviewFormat; camera.SetPreviewCallback(new PreviewCallback(width, height, format)); Control.Preview = camera; } } protected override void Dispose(bool disposing) { if (disposing) { Control.Preview.Release(); } base.Dispose(disposing); } } }