Moj*_*oji 5 c# android xamarin xamarin.forms
这听起来可能是一个愚蠢的问题但是因为我对Xamarin很新,所以我会去做.
所以我有一个Xamarin.Forms解决方案,还有一个Android项目和一个可移植类库.我从Android项目中的MainActivity.cs调用起始页面,该项目本身从可移植类库项目中定义的表单调用第一页(通过调用App.GetMainPage()).现在,我想在我的一个表单上添加一个click事件来获取设备的当前位置.显然,要获得我必须在Android项目中实现它的位置.那么如何从Portable Class Library项目中的click事件中调用GetLocation方法呢?任何帮助,将不胜感激.抱歉可能重复.
Vin*_*ier 12
如果您使用Xamarin.Forms.Labs,解决方案确实在提供的链接中.如果你只使用Xamarin.Forms,那么使用DependencyService 几乎是一样的.这比看起来容易. http://developer.xamarin.com/guides/cross-platform/xamarin-forms/dependency-service/
我建议阅读这篇文章,我几乎要试图理解我的大脑. http://forums.xamarin.com/discussion/comment/95717
为方便起见,这是一个可以适应的工作示例,如果您还没有完成工作:
在Xamarin.Forms项目中创建一个接口.
using Klaim.Interfaces;
using Xamarin.Forms;
namespace Klaim.Interfaces
{
public interface IImageResizer
{
byte[] ResizeImage (byte[] imageData, float width, float height);
}
}
Run Code Online (Sandbox Code Playgroud)
在Android项目中创建服务/自定义渲染器.
using Android.App;
using Android.Graphics;
using Klaim.Interfaces;
using Klaim.Droid.Renderers;
using System;
using System.IO;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: Xamarin.Forms.Dependency (typeof (ImageResizer_Android))]
namespace Klaim.Droid.Renderers
{
public class ImageResizer_Android : IImageResizer
{
public ImageResizer_Android () {}
public byte[] ResizeImage (byte[] imageData, float width, float height)
{
// Load the bitmap
Bitmap originalImage = BitmapFactory.DecodeByteArray (imageData, 0, imageData.Length);
Bitmap resizedImage = Bitmap.CreateScaledBitmap(originalImage, (int)width, (int)height, false);
using (MemoryStream ms = new MemoryStream())
{
resizedImage.Compress (Bitmap.CompressFormat.Jpeg, 100, ms);
return ms.ToArray ();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以当你这样称呼时:
byte[] test = DependencyService.Get<IImageResizer>().ResizeImage(AByteArrayHereCauseFun, 400, 400);
Run Code Online (Sandbox Code Playgroud)
它执行Android代码并将值返回到您的Forms项目.
| 归档时间: |
|
| 查看次数: |
7881 次 |
| 最近记录: |