[英]Xamarin native apps + PCL: Share images in PCL project
我正在使用Xamarin開發適用於多個平台的應用程序。 共享代碼托管在單獨的PCL項目中。 該項目包含大量圖像,我也想通過PCL項目共享這些圖像。
那可能嗎? 如何從特定於平台的項目中訪問圖像數據?
您應該將圖像放在每個單獨的項目中,因為每個平台具有不同的圖像分辨率約定,並且為了優化和正確顯示圖像,您需要使用操作系統特定的約定將圖像保存在不同的項目中。
您可以像這樣在PCL項目中引用圖像文件:
beachImage.Source = "waterfront.png";
在每個OS項目中按照以下約定定義了濱水區:
Android圖片應放置在Resources \\ Drawable \\ {specificResolution}中
Android具有以下解決方案(來自Android開發者網站 ):
ldpi (low) ~120dpi mdpi (medium) ~160dpi hdpi (high) ~240dpi xhdpi (extra-high) ~320dpi xxhdpi (extra-extra-high) ~480dpi xxxhdpi (extra-extra-extra-high) ~640dpi
請注意,每種分辨率都有自己的圖像文件夾。
在iOS中,您具有以下解決方案(摘自iOS Human Interface Guidelines ):
您應該通過在“資源”文件夾中添加“ @ 2x”或“ @ 3x”來分離圖像。
PCL支持的ResourceManager
類僅支持一組有限的數據類型,而Image不是其中之一。
根據此處的MSDN文章 ,處理圖像數據類型的最佳方法是將圖像編碼為Base64編碼的字符串資源,然后將數據解碼為ByteArray
,然后將該字節數組加載到Image中。
您將不得不預處理圖像以生成Base64字符串,因為在運行時無法完成。
我終於做了什么(到現在為止,我只能在iOS和Droid項目上進行驗證,Windows Phone仍在開發中):
我將共享項目中的圖像數據作為Stream
,如下所示:
public Stream GetImageStream () {
return assembly.GetManifestResourceStream (nameOfResource);
}
圖像的屬性設置為EmbeddedResource
。 在我的iOS項目中,我可以像這樣訪問我的圖像:
using (var stream = myClass.GetImageStream ()) {
var image = new UIImage (NSData.FromStream (stream));
// do stuff with image
}
在Android上,我使用以下代碼:
using (var stream = myClass.GetImageStream ()) {
var bitmap = BitmapFactory.DecodeStream (stream);
// do stuff with bitmap
}
歡迎反饋是否有這種做法的陷阱! (除了我現在可以使用的明顯的大小調整問題之外,我還可以想象這種方法繞過了任何特定於平台的緩存機制嗎?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.