我正在使用Visual Studio和Xamarin插件开发便携式应用程序 (Xamarin.Forms)。
我尝试使用来自网址的图片创建网格视图,我按照GridView的这个示例进行操作:
我尝试在ImageAdapter上替换以下行:
http://developer.xamarin.com/recipes/android/layout/grid_view/create_a_grid_view/
此示例与/ resources / drawables上的图像完美配合,但我需要从URL下载图像。
imageView.SetImageResource(thumbIds[position]);
与
Android.Net.Uri url = Android.Net.Uri.Parse("http://xamarin.com/resources/design/home/devices.png");
imageView.SetImageURI(url);
但不能工作。
请帮帮我。
答案 0 :(得分:1)
问题是SetImageURI
只能用于特定于Android操作系统的URI。当您提供imageView
互联网网址时,它会尝试使用您提供的地址在本地查找手机上的图像,因此您会收到“没有此类文件或目录”错误。
您需要的是下载图像,然后使用BitmapFactory
转换为Android位图。然后使用imageView.SetImageBitmap
设置图像。
private Bitmap GetBitmapFromUrl(string url)
{
using(WebClient webClient = new WebClient())
{
byte[] bytes = webClient.DownloadData(url);
if(bytes != null && bytes.Length > 0)
{
return BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length);
}
}
return null;
}
将图像应用于imageView
Bitmap bitmap = GetBitmapFromUrl("http://xamarin.com/resources/design/home/devices.png");
imageView.SetImageBitmap(bitmap);
答案 1 :(得分:0)
这两种方法都有效,但异步进行是一种很好的做法。这里有一些很好的例子:
此外,您还可以通过RecyclerView获得一篇关于使用RecyclerView的文章,该文章名为" Xamarin Android - 交错网格布局。并且没有Java绑定!" http://blog.wislon.io/posts/2015/03/05/xamarin-android-staggered-grid-layout/
只需替换line viewHolder.Thumbnail.SetImageResource(Resource.Drawable.Icon); MyRecyclerAdapter.cs的内容如下:
同步方法 var imageBitmap = Common.GetImageBitmapFromUrl(gridItem.UrlPhoto); viewHolder.Thumbnail.SetImageBitmap(imageBitmap);
异步方法(使用xamarin-store-app中的Image Helper方法。请记住在主要活动上设置FileCache.SaveLocation = CacheDir.AbsolutePath; viewHolder.Thumbnail.SetImageFromUrlAsync(gridItem.UrlPhoto);