如何在Xamarin Cross-Platform应用程序中显示文件夹中的所有图像?
问题描述:
我正在使用VS 2017创建一个跨平台(UWP,Android,iOS)的Xamarin应用程序。我试图将设备上的文件夹中的所有图像显示为缩略图(类似于图库应用程序,附带示例屏幕截图)。 如何在Xamarin Cross-Platform应用程序中显示文件夹中的所有图像?
我特地到设在Xamarin网站(Link)WrapLayout
示例代码,但它使用JSON
protected override async void OnAppearing()
{
base.OnAppearing();
var images = await GetImageListAsync();
foreach (var photo in images.Photos)
{
var image = new Image
{
Source = ImageSource.FromUri(new Uri(photo + string.Format("?width={0}&height={0}&mode=max", Device.OnPlatform(240, 240, 120))))
};
wrapLayout.Children.Add(image);
}
}
async Task<ImageList> GetImageListAsync()
{
var requestUri = "https://docs.xamarin.com/demo/stock.json";
using (var client = new HttpClient())
{
var result = await client.GetStringAsync(requestUri);
return JsonConvert.DeserializeObject<ImageList>(result);
}
}
我也看着Xamarin Media Plugin
(Link)加载所有图片来自网络,但它表明一次只有一个图像。示例代码 -
await CrossMedia.Current.Initialize();
var file = await CrossMedia.Current.PickPhotoAsync();
if (file == null)
return;
MainImage.Source = ImageSource.FromStream(() =>
{
var stream = file.GetStream();
file.Dispose();
return stream;
});
但我无法找到一个方法来实现这两个(或任何其它方法)中,我可以在我的应用程序创建自己的画廊节这样的方式。
答
您需要在您的特定平台中创建一个活动。此活动将作为一个意图通过您的PCL项目启动,例如使用Dependency Services。 在这个自定义的活动,你应该有填充从当前目录的源一个GridView如果该文件符合你的限制,例如特定扩展名,大小等
最后,让所选择的图像您只需发送图像路径或任何你需要使用DependencyService的PCL项目。