Xamarin.Forms中实现选择本地图片,并进行剪裁。(Android端)
今天与大家分享在Xamarin.Forms中的如何实现选择本地图片并进行剪裁。实现思路:Xamarin.Forms中定义相应接口,Xamarin.Android中实现该接口,也就是说直接使用Android原生平台上的方式。具体看代码:
步骤1、在Forms中定义接口,参数finish是剪裁完成后的操作处理,sourceType是从相机还是图库中获取图片
public interface ICutImageHandle{void StartCutImage(Action<string> finish, int sourceType);}
步骤2、Xamarin.Android工程中实现接口。
[assembly: Dependency(typeof(CutImageHandle_Droid))]
namespace Xamarin.Forms.Study.Droid
{public class CutImageHandle_Droid:ICutImageHandle{private static Context Context{get { return Forms.Context ?? Android.App.Application.Context; }}public void StartCutImage(Action<string> finish,int sourceType){Intent _intent = new Intent(Context, typeof(MediaPickerActivity));_intent.PutExtra("sourceType", sourceType); //0-相机 1-图库Context.StartActivity(_intent);MediaPickerActivity.ImageCut += (str) =>{if (finish != null){finish(str);}}; }}
}
MediaPickerActivity类:
[Activity]public class MediaPickerActivity : Activity{public static Action<string> ImageCut;Java.IO.File sdcardTempFile;protected override void OnCreate(Bundle savedInstanceState){base.OnCreate(savedInstanceState);sdcardTempFile = new Java.IO.File("/mnt/sdcard/", "tmp_pic_" + SystemClock.CurrentThreadTimeMillis() + ".jpg");//0-相机 1-图库if (Intent.GetIntExtra("sourceType",1) == 0){CutImageByCamera();}else if (Intent.GetIntExtra("sourceType",1) ==1){CutImageByImgStore();}}protected override void OnActivityResult(int requestCode, Result resultCode, Intent data){// base.OnActivityResult(requestCode, resultCode, data);if (resultCode == Result.Ok){if (requestCode == 3) //剪裁{if (ImageCut != null){ImageCut(sdcardTempFile.AbsolutePath);}}}Finish();}private void CutImageByImgStore(){Intent _intentCut = new Intent("android.intent.action.PICK");_intentCut.SetDataAndType(MediaStore.Images.Media.InternalContentUri, "image/*");_intentCut.PutExtra("output", Android.Net.Uri.FromFile(sdcardTempFile));_intentCut.PutExtra("crop", "true");_intentCut.PutExtra("aspectX", 1);// 裁剪框比例_intentCut.PutExtra("aspectY", 1);_intentCut.PutExtra("outputX", 180);// 输出图片大小_intentCut.PutExtra("outputY", 180);this.StartActivityForResult(_intentCut, 3);}private void CutImageByCamera(){Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");intent.PutExtra("output", Android.Net.Uri.FromFile(sdcardTempFile));intent.PutExtra("crop", "true");intent.PutExtra("aspectX", 1);// 裁剪框比例intent.PutExtra("aspectY", 1);intent.PutExtra("outputX", 180);// 输出图片大小intent.PutExtra("outputY", 180);StartActivityForResult(intent, 3);}}
步骤3:调用接口,实现功能
Button _btn2 = new Button() { Text = "cut image" };_btn2.Clicked += (sender, arg) =>{DependencyService.Get<ICutImageHandle>().StartCutImage((_str) =>{_img.Source = _str;},1);};
效果如图:
通过这个列子,大家应该了解了Xamarin中如何在原生平台上实现接口,原生平台上可以实现的东西,大部分都可以通过这样的方式去实现。但是这种方式还是比较麻烦的,因为各个平台需要单独实现。不过好在以后Xamarin更加成熟了,我想应该会变得更加简单些。以上是我自己写的代码,比较粗糙。大家有有什么问题可以加QQ群一起学习讨论。QQ群365516544
Xamarin.Forms中实现选择本地图片,并进行剪裁。(Android端)相关推荐
- Xamarin.Forms中为WebView指定数据来源Source
Xamarin.Forms中为WebView指定数据来源Source 网页视图WebView用来显示HTML和网页形式内容.使用这种方式,可以借助网页形式进行界面设计,并利于更新和维护.WebView ...
- Xamarin.Forms中使用LiteDB分页
Xamarin.Forms中使用LiteDB分页 在移动应用的开发中,为力提高用户体验,一般都会在本地设计一套数据缓存.这里我使用的是LiteDB来缓存数据. LiteDB是.Net平台的一个开源的N ...
- Xamarin XAML语言教程Xamarin.Forms中构建进度条
Xamarin XAML语言教程Xamarin.Forms中构建进度条 ProgressBar被称为进度条,它类似于没有滑块的滑块控件.进度条总是水平放置的.本节将讲解如何使用进度条. 注意:进度条在 ...
- Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色 在图12.10~12.12中我们会看到在各个平台下活动指示器的颜色是不一样的.Android的活动指示器默认是深粉色的: ...
- Xamarin XAML语言教程Xamarin.Forms中程序状态与进度(一)
Xamarin XAML语言教程Xamarin.Forms中程序状态与进度(一) 在Xamarin.Forms中,提供了两个控件用来指示程序的状态和进度.他们分别为活动指示器和进度条.其中,活动指示器 ...
- Xamarin.Forms 中iOS通过URL Scheme判断应用是否安装
Xamarin.Forms 中iOS通过URL Scheme判断应用是否安装 在移动应用开发中,经常需要判断一个app是否安装,iOS中有什么方式可以判断app是否安装呢? 这里介绍通过Url Sch ...
- 解决微信小程序开发中wxss中不能用本地图片
微信小程序开发中wxss中不能用本地图片,我们可以用将我们的图片传到服务器上,然后直接引用在线地址.但是当我们没有服务器时,我们可以用"图床",这个具体可以百度.这里我们用第二种方 ...
- js 选择本地图片并显示
选择本地图片并将所选图片显示 <html> <body> <img id="image" src=""/> <br/& ...
- 关于van-card中thumb引入本地图片而无法正常显示的解决方法
关于van-card中thumb引入本地图片而无法正常显示的解决方法 前言 解决办法 总结 前言 最近在弄一个微信公众号,是H5前端,用到的是vant组件. 当然Vant的官方文档以及例子都有,但是很 ...
最新文章
- 云计算将成为金融服务业的主流技术
- 关于flume配置加载(二)
- Naigos PNP图无法加载最新数据
- 将数据导入DB2带自增字段的表
- java8-接口新特性
- python爬虫多线程是什么意思_python爬虫中多线程的使用详解
- IETF访谈: HTTP/3全球份额持续增长,QUIC前景一片光明
- css --- 行内框和内容区
- html自动图片尺寸,关于html:CSS背景图像适合宽度,高度应按比例自动缩放
- 冒泡排序--Java
- python中的reduce函数用法
- c语言message函数应用,调用input_message的参数太少在主函数中 是神马意思 大神们帮帮我...
- 插件properties_PageHelper分页插件的原理是什么
- solr导入mysql时间类型_docker 安装solr 导入mysql时报错
- mib browser使用
- 国产手机再次发力,是否可以阻击三星苹果
- 湖南大学头歌期中模拟试卷
- 自定义icon,在iconfont.css中引入自定义图标
- 如何在CSDN写笔记_写笔记前的插件安装
- GD32F303课程【2】GPIO操作LED和按键