Xamarin Visual Studio:带有来自 url 的图像的 GridView
Xamarin Visual Studio: GridView with image from url
我正在使用 Visual Studio 和 Xamarin 插件开发可移植应用程序
(Xamarin.Forms).
我正在尝试使用来自 url 的图像创建一个 gridview,我正在遵循 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);
但不起作用。
请帮助我。
问题是 SetImageURI
只能与特定于 Android 操作系统的 URI 一起使用。当你给你的 imageView
互联网 url 它会尝试使用你给它的地址在你的 phone 本地找到图像,因此你会得到一个 "No such file or directory" 错误。
您需要做的是下载图像,然后使用 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);
这两种方法都有效,但异步执行是一种很好的做法。这里有一些很好的例子:
- Xamarin 中的异步图像加载 Android http://javatechig.com/xamarin/asynchronous-image-loading-xamarin-android
- xamarin-store-app 图像助手https://github.com/xamarin/xamarin-store-app/blob/master/XamarinStore.Droid/Helpers/Images.cs
还有一篇关于使用 RecyclerView 的好文章 "Xamarin Android - A Staggered Grid Layout, via a RecyclerView. And no Java bindings!" http://blog.wislon.io/posts/2015/03/05/xamarin-android-staggered-grid-layout/
只需替换行 viewHolder.Thumbnail.SetImageResource(Resource.Drawable.Icon); MyRecyclerAdapter.cs 的这样的事情:
同步方法
var imageBitmap = Common.GetImageBitmapFromUrl(gridItem.UrlPhoto);
viewHolder.Thumbnail.SetImageBitmap(imageBitmap);
Async 方法(使用 xamarin-store-app 中的 Image Helper 方法。记得在 main activity 上设置 FileCache.SaveLocation = CacheDir.AbsolutePath;)
viewHolder.Thumbnail.SetImageFromUrlAsync(gridItem.UrlPhoto);
我正在使用 Visual Studio 和 Xamarin 插件开发可移植应用程序 (Xamarin.Forms).
我正在尝试使用来自 url 的图像创建一个 gridview,我正在遵循 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);
但不起作用。
请帮助我。
问题是 SetImageURI
只能与特定于 Android 操作系统的 URI 一起使用。当你给你的 imageView
互联网 url 它会尝试使用你给它的地址在你的 phone 本地找到图像,因此你会得到一个 "No such file or directory" 错误。
您需要做的是下载图像,然后使用 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);
这两种方法都有效,但异步执行是一种很好的做法。这里有一些很好的例子:
- Xamarin 中的异步图像加载 Android http://javatechig.com/xamarin/asynchronous-image-loading-xamarin-android
- xamarin-store-app 图像助手https://github.com/xamarin/xamarin-store-app/blob/master/XamarinStore.Droid/Helpers/Images.cs
还有一篇关于使用 RecyclerView 的好文章 "Xamarin Android - A Staggered Grid Layout, via a RecyclerView. And no Java bindings!" http://blog.wislon.io/posts/2015/03/05/xamarin-android-staggered-grid-layout/
只需替换行 viewHolder.Thumbnail.SetImageResource(Resource.Drawable.Icon); MyRecyclerAdapter.cs 的这样的事情:
同步方法 var imageBitmap = Common.GetImageBitmapFromUrl(gridItem.UrlPhoto); viewHolder.Thumbnail.SetImageBitmap(imageBitmap);
Async 方法(使用 xamarin-store-app 中的 Image Helper 方法。记得在 main activity 上设置 FileCache.SaveLocation = CacheDir.AbsolutePath;) viewHolder.Thumbnail.SetImageFromUrlAsync(gridItem.UrlPhoto);