关于Xamarin.Android ListView图片加载+Android-Universal-Image-Loader框架

(转载请说明出处,谢谢)

最近在搞Xamarin.Android 技术框架下如何利用ListView更好的展示网络图片,做的过程中才发现这东西不是一个简单的图片异步加载过程就可以搞定。遇到的问题在此做个思路记载。

思路一:由于没有先验经验。一上来打算自己搞ListView的性能优化问题,结果发现自己做出来的效果不好,尤其是每次一滑动要到服务器上面请求数据,这种真的太恶心。

待解决问题

         (1)关于如何在Xamarin.Android 里面使用异步加载图片

         (2)Xamarin.Android异步加载图片错位重复图片闪烁现象

         (3)Xamarin.Android图片缓存,性能优化,避免不必要的服务器请求数据

思前想后,认识到:为什么要自己造轮子?好,想到这里,心里舒坦了一大半,OK,思路一放弃,转为思路二。

思路二:

1  参考现有App的异步图片加载框架,本次ListView选择主流开源框架Android-Universal-Image-Loader为目标

2  A由于Android-Universal-Image-Loader为Java库我们要在Xamarin中使用需要Binding库,具体Binding过程可以参考官网

    B 其实我知道A对于大家来说没有什么吸引力,大家想要的其实是这个,Gitup上面工程地址,伸手党表示感谢: https://github.com/LukeForder/Xamarin-Bindings-Android-Universal-Image-Loader

3  参考相关文章,进行Xamarin.Android下的代码移植

    Android-Universal-Image-Loader框架学习:

    http://blog.csdn.net/xiaanming/article/details/26810303#comments

    ListView整合:

    http://www.tuicool.com/articles/f2aiue

高能预警

关于图片错位说明:当我们滑动到Item7的时候,由于图片为异步加载,可能刷出来的是item5的图片

解决办法:在Xamarin.Android 中还是采用与Android一样的方式,利用ViewHolder设置Tag

注意:ViewHolder需继承Object基类

 

亲测Ok,已实现功能,具体代码就不贴了,Android相关的文章里面都写得很清楚了。有什么问题大家可以一起交流。



这个可以实现ImageView异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画。解决了:1. listview加载oom问题 2. listview加载时卡顿的现象 3. listview加载时item中图片重复错位等情况 可以配置: 1. 设置加载图片的最大尺寸 2. 设置默认图片的显示 3. 设置图片位图模式 4. 设置内存缓存的最大值。 5. 文件缓存保存的目录   这个框架基本的代码是很久以前不知道哪里弄的,零零碎碎的,现在已经优化了很多,所以现在上传到github上共享。   讲讲使用方式吧:   首先使用前下载源码或者jar包(见github:https://github.com/wangjiegulu/ImageLoaderSample) 然后进行图片加载器(ImageLoader)的配置和初始化,推荐的方法如下: 新建MyApplication类,继承Application,在onCreate中增加如下代码:/**  * Created with IntelliJ IDEA.  * Author: wangjie  email:tiantian.china.2@gmail.com  * Date: 14-2-27  * Time: 上午11:25  */ public class MyApplication extends Application{     @Override     public void onCreate() {         super.onCreate();         ImageLoader.init(getApplicationContext(),                 new CacheConfig()                     .setDefRequiredSize(600) // 设置默认的加载图片尺寸(表示宽高任一不超过该值,默认是70px)                     .setDefaultResId(R.drawable.ic_launcher) // 设置显示的默认图片(默认是0,即空白图片)                     .setBitmapConfig(Bitmap.Config.ARGB_8888) // 设置图片位图模式(默认是Bitmap.CacheConfig.ARGB_8888)                     .setMemoryCachelimit(Runtime.getRuntime().maxMemory() / 3) // 设置图片内存缓存大小(默认是Runtime.getRuntime().maxMemory() / 4) //                  .setFileCachePath(Environment.getExternalStorageDirectory().toString()   "/mycache") // 设置文件缓存保存目录         );     }     …… }然后再AndroidManifest.xml中添加:......到此,配置已经全部完成:接下来,使用ImageLoader加载图片:holder.progress.setText("0%");     holder.progress.setVisibility(View.VISIBLE);     final ViewHolder vhr = holder;     ImageLoader.getInstances().displayImage(list.get(position), holder.image, new ImageLoader.OnImageLoaderListener() {         @Override         public void onProgressImageLoader(ImageView imageView, int currentSize, int totalSize) {             vhr.progress.setText(currentSize * 100 / totalSize   "%");         }         @Override         public void onFinishedImageLoader(ImageView imageView, Bitmap bitmap) {             vhr.progress.setVisibility(View.GONE);         }     });     或者:     ImageLoader.getInstances().displayImage(url, imageIv);     或者     ImageLoader.getInstances().displayImage(url, imageIv, 100);备注:例子中,用到了一部分注解(与ImageLoader功能无关,但是可以简化代码的编写) 可以点下面连接进入:github:https://github.com/wangjiegulu/androidInject博客:http://www.cnblogs.com/tiantianbyconan/p/3459139.htmlhttp://www.cnblogs.com/tiantianbyconan/p/3540427.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值