Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 可以在视图中插入相机视图,如Instagram_Android_Xamarin.forms_Android Camera - Fatal编程技术网

Android 可以在视图中插入相机视图,如Instagram

Android 可以在视图中插入相机视图,如Instagram,android,xamarin.forms,android-camera,Android,Xamarin.forms,Android Camera,是否可以使用xamarin.form创建一个界面,用于捕捉或选择Instagram上的图像 这将是一个像Instagram一样的正方形图像。我测试了MediaPlugin,但它只是打开了摄像头,我无法将其插入到视图中 您应该创建一个自定义渲染器 首先在共享项目中创建一个视图,如下所示: 公共枚举选项 { 后方的 正面 } 公共类摄像师:视图 { public static readonly BindableProperty CameraProperty=BindableProperty.Cre

是否可以使用xamarin.form创建一个界面,用于捕捉或选择Instagram上的图像

这将是一个像Instagram一样的正方形图像。我测试了MediaPlugin,但它只是打开了摄像头,我无法将其插入到视图中


您应该创建一个自定义渲染器

首先在共享项目中创建一个视图,如下所示:

公共枚举选项
{
后方的
正面
}
公共类摄像师:视图
{
public static readonly BindableProperty CameraProperty=BindableProperty.Create(name of(摄像机)、typeof(摄像机选项)、typeof(摄像机视图)、camerapoptions.Rear);
公共摄像机选项摄像机
{
获取{return(CameraOptions)GetValue(CameraProperty);}
set{SetValue(CameraProperty,value);}
}
}
然后为每个平台创建渲染器

安卓:
[程序集:导出渲染器(typeof(CameraView),typeof(CameraViewRenderer))]
命名空间CameraViewXamarinForms.Droid.Renderers
{
公共类摄影机渲染器:ViewRenderer
{
国家摄影评论;
公共摄影师(上下文):基础(上下文)
{
}
受保护的重写异步void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(Control==null)
{
cameraPreview=新的NativeCameraView(上下文);
SetNativeControl(cameraPreview);
}
if(例如NewElement!=null)
{
尝试
{
PermissionStatus状态=等待权限。CheckStatusAsync();
if(status!=PermissionStatus.grated)
{
status=wait Permissions.RequestAsync();
}
if(status==PermissionStatus.grated)
{
cameraPreview.OpenCamera(例如NewElement.Camera);
SetNativeControl(cameraPreview);
}
else if(状态!=PermissionStatus.Unknown)
{
//等待DisplayAlert(“摄像头被拒绝”,“无法继续,重试”,“确定”);
}
}
捕获(例外情况除外)
{
}
}
}
}
}
Android-NativeCameraView:
公共密封类NativeCameraView:FrameLayout,TextureView.ISurfaceTextureListener
{
私有静态只读SparseIntArray方向=新SparseIntArray();
公共事件处理人照片;
公共bool OpeningCamera{private get;set;}
公共摄像设备;
专用只读摄像机StateListener\u StateListener;
私人CaptureRequest.Builder\u previewBuilder;
私人摄像机拍摄会话(预览会话);;
私有SurfaceTexture _viewSurface;
私有只读TextureView_cameraTexture;
私有大小_previewSize;
私有只读上下文\u上下文;
私人摄像管理员(U经理),;
公共NativeCameraView(上下文):基础(上下文)
{
_上下文=上下文;
var充气器=LayoutInflater.FromContext(上下文);
如果(充气器==null)返回;
var视图=充气机。充气(Resource.Layout.CameraLayout,this);
_cameraTexture=view.findviewbyd(Resource.Id.cameraTexture);
_单击+=(发送者,参数)=>{TakePhoto();};
_CamerateTexture.SurfaceTextureListener=此;
_mStateListener=new CameraStateListener{Camera=this};
方向。附加((int)SurfaceOrientation.Rotation0,0);
方向。附加((int)SurfaceOrientation.Rotation90,90);
方向。附加((int)SurfaceOrientation.rotation180180);
方向。附加((int)SurfaceOrientation.Rotation270);
}
SurfaceTextureAvailable上的公共空心(SurfaceTexture曲面、整型宽度、整型高度)
{
_视图表面=表面;
配置变换(宽度、高度);
StartPreview();
}
曲面上的公共布尔已销毁(曲面纹理曲面)
{
返回true;
}
SurfaceTextureSizeChanged上的公共空心(SurfaceTexture surface,int-width,int-height)
{
}
已更新SurfaceTexture上的公共空间(SurfaceTexture surface)
{
}
public void OpenCamera(摄影机选项)
{
如果(_context==null | | OpeningCamera)
{
返回;
}
OpeningCamera=true;
_manager=(CameraManager)_context.GetSystemService(context.CameraService);
var cameraId=_manager.GetCameraIdList()[(int)选项];
var characteristics=\u manager.GetCameraCharacteristics(cameraId);
var map=(StreamConfigurationMap)characteristics.Get(CameraCharacteristics.ScalerStreamConfiguration map);
_previewSize=map.GetOutputSizes(Class.FromType(typeof(SurfaceTexture)))[0];
_manager.OpenCamera(cameraId,mStateListener,null);
}
私人照片
{
if(_context==null | | CameraDevice==null)返回;
var characteristics=\u manager.GetCameraCharacteristics(CameraDevice.Id);
Size[]jpegsize=null;
如果(特征!=null)
{
jpegSizes=((StreamConfigurationMap)characteristics.Get(CameraCharacteristics.ScalerStreamConfiguration Map)).GetOutputSizes((int)ImageFormatType.Jpeg);
}
var宽度=480;
变量高度=640;
if(jpegSizes!=null&&jpegSizes.Length>0)
{
宽度=JPEG大小[0]。宽度;
高度=JPEG大小[0]。高度;
}
var reader=ImageReader.NewInstance(宽度、高度、ImageFormatType.Jpeg,1);
var outputSurfaces=newlist(2){reader.Surface,newsurface(_viewSurface)};
var captureBuilder=CameraDevice.CreateCaptureRequest(CameraTem