我使用以下代码:
var baseUrl = DependencyService.Get<IBaseUrl> ().Get ();
var backgroundImage = new Image () {
Source = FileImageSource.FromFile (
System.IO.Path.Combine (baseUrl, "Content", "images", "background-2.jpg")
)
};
iOS和Androids的DependencyServices如下所示:
// iOS
[assembly: Xamarin.Forms.Dependency (typeof (BaseUrl_iOS))]
namespace TuneProtectApp.iOS
{
public class BaseUrl_iOS : IBaseUrl
{
public BaseUrl_iOS () { }
public string Get ()
{
return NSBundle.MainBundle.BundlePath;
}
}
}
// Android
[assembly: Xamarin.Forms.Dependency (typeof (BaseUrl_Droid))]
namespace TuneProtectApp.Droid
{
public class BaseUrl_Droid : IBaseUrl
{
public BaseUrl_Droid () {}
public string Get ()
{
return "file:///android_asset/";
}
}
}
backgroundImage在iOS上加载但在Android上没有加载。如何从Android上的Xamarin.Forms中的资产加载图像?
答案 0 :(得分:1)
在我的 Xamarin.forms(共享)应用中,我有一个注册页面,用户还必须为其头像选择图像。根据用户的性别,我将男性或女性符号图像显示为默认(用户可以选择另一个,如果他想这样做)。
我已将其实施如下:
首先为所有项目(iOS,Android和WP)创建了一个子目录 \ Embedded (直接在每个项目类型的项目根目录中)。登记/>
然后将两个.jpg添加到所有项目的新目录中
在我的应用程序中,我有一个全局变量(GV.cEmbeddedAblage)
这是填写启动代码:
string cNameSpace = "";
switch (Device.OS)
{
case TargetPlatform.WinPhone:
cNameSpace = "MatrixGuide.WinPhone";
break;
case TargetPlatform.iOS:
cNameSpace = "MatrixGuide.iOS";
break;
case TargetPlatform.Android:
cNameSpace = "MatrixGuide.Droid";
break;
//
}
GV.cEmbeddedAblage = cNameSpace + ".Embedded.";
此外,我为图像创建了一个全局字节数组(例如男性):
static Byte[] _SymbolMann;
public static Byte[] ByteSymbolMann
{
get { return _SymbolMann; }
set { _SymbolMann = value; }
}
然后我可以轻松地从共享代码(在注册页面上)访问图像(例如):
生成路径,以字节数组加载图像(如果尚未加载):
string cFilename = "";
if (GV.ByteSymbolMann == null) // not yet loaded - only load one time
{
cFilename = GV.cEmbeddedAblage + "SymbolMann.jpg";
var assembly = this.GetType().GetTypeInfo().Assembly;
byte[] buffer;
using (Stream s = assembly.GetManifestResourceStream(cFilename))
{
long length = s.Length;
buffer = new byte[length];
s.Read(buffer, 0, (int)length);
GV.ByteSymbolMann = buffer;
}
}
填写另一个byte.array(选定(已加载)男/女图片):
AvatarErfassung = GV.ByteSymbolMann;
在页面上创建图片:
var Avatar = new Image { HeightRequest = 70, WidthRequest = 70, HorizontalOptions = LayoutOptions.Start };
将所选图像作为图像的源:
Avatar.Source = ImageSource.FromStream(() => new MemoryStream(AvatarErfassung));
你应该可以这样做......