原文 [Xamarin.Android] 异步的网络图片下载
在设计要从网络上接大量数据并且显示在Android Listview中,而这些资料是利用Json格式传送并且数据中包含这图片档案。 那在Xamarin中如何实作这种异步下载的观念?
*在阅读这一篇前,建议可以先看一下当麻哥的如何客制化的ListView之章
http://www.dotblogs.com.tw/junegoat/archive/2013/07/17/c-sharp-xamarin-android-customize-listitem-baseadapter.aspx
要客制化ListView,基本上就是四个步骤 :
- 1. 建立一个客制的Layout。
- 2. 建立一个数据型别。
- 3. 建立一个客制的Adapter。
- 4. 在View中建立检视
1. 建立一个客制的Layout
在这个lab中,客制化的View的部分我建立了三个View,分别是两个TextView与一个ImageView。
2. 建立一个数据型别
这边我制作了一个WebApi然后把它放置在Windows Azure上:
Json URL : http://benluwebapi.azurewebsites.net/api/values ,这个API会回传我已经放在Windows Azure上的文字以及照片资源位置。
然后去Json2csharp网站中Generate类别档案 http://json2csharp.com 。
直接把网址填进去,然后按下”Generate”后,可以得到这个Json档案的对应类别。
public class RootObject{
public string title { get; set; }
public string detail { get; set; }
public string image { get; set; }
}
3. 建立一个客制的Adapter
比较详细的信息就请参考当麻许的文章,这边相对应他的文章只改了两行程序代码。
-
- 3.1 这个范例因为会使用到异步下载图片,所以这边要去下载MonoDroid.UrlImageViewHelper 这个项目文件。下载回来后在Xamarin里面编译这一个档案,得到UrlImageViewHelper.dll档案。 下载位置:
https://github.com/Redth/MonoDroid.UrlImageViewHelper
- 在专案中把这个UrlImageViewHelper.dll档案加入参考。
-
- 3.2 在客制化的Customer View中,在Layout读画面的部分加入底下的Code。 这样Android再读取网络图片数据的时候就会以异步的方式下载。
var imageView = view.FindViewById (Resource.Id.imageView1);
UrlImageViewHelper.UrlImageViewHelper.SetUrlDrawable(imageView, item.image);
4. 在View建立检视并且传递数据
参考信息
- Asynchronous Image Loading (from URL)
http://forums.xamarin.com/discussion/799/listview-asynchronous-image-loading-from-url - MonoDroid.UrlImageViewHelper
https://github.com/Redth/MonoDroid.UrlImageViewHelper - UrlImageViewHelper for Java
https://github.com/koush/UrlImageViewHelper#