安卓新的联网方式 Volley的使用(2)
如果使用volley 获取 网络图片 最好还是用 Volley 提供的NetworkImageView类, 可以很轻松的 完成工作, 而且他可以设置缓存, lru 和 sd卡的缓存。一些都封装好了。
NetworkImageView类的具体使用方式如下:
<FrameLayout android:id="@+id/flImageContainer" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/gvImages" android:layout_margin="30dp" > <com.android.volley.toolbox.NetworkImageView android:id="@+id/nivTestView" android:layout_width="100dp" android:layout_height="100dp" > </com.android.volley.toolbox.NetworkImageView> </FrameLayout>
networkImageView = (NetworkImageView) findViewById(R.id.nivTestView); ..找到对应的 NetworkImageview mQueue = Volley.newRequestQueue(this); //老样子 ,生成 LruImageCache lruImageCache = LruImageCache.instance(); // 新加的, 这是一个实现了ImageCache 接口的缓存类 ,使用Lru ImageLoader imageLoader = new ImageLoader(mQueue,lruImageCache); //主要的联网获取图片工作都交给了他 networkImageView.setDefaultImageResId(R.drawable.ic_launcher); //默认加载图片 networkImageView.setErrorImageResId(R.drawable.ic_launcher); //错误的图片 networkImageView.setImageUrl(URLS[1], imageLoader);
所以在利用NetworkImageView之前,我们还需要先去实现这个接口,而Volley推荐的也就是LruCache,代码中的LruImageCache实现如下:
package com.lms.volleydemo; import android.graphics.Bitmap; import android.support.v4.util.LruCache; import com.android.volley.toolbox.ImageLoader.ImageCache; public class LruImageCache implements ImageCache{ private static LruCache<String, Bitmap> mMemoryCache; private static LruImageCache lruImageCache; private LruImageCache(){ // Get the Max available memory int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheSize = maxMemory / 8; mMemoryCache = new LruCache<String, Bitmap>(cacheSize){ @Override protected int sizeOf(String key, Bitmap bitmap){ return bitmap.getRowBytes() * bitmap.getHeight(); } }; } public static LruImageCache instance(){ if(lruImageCache == null){ lruImageCache = new LruImageCache(); } return lruImageCache; } @Override public Bitmap getBitmap(String arg0) { return mMemoryCache.get(arg0); } @Override public void putBitmap(String arg0, Bitmap arg1) { if(getBitmap(arg0) == null){ mMemoryCache.put(arg0, arg1); } } }
2 然后开始合体了
ImageLoader imageLoader = new ImageLoader(mQueue,lruImageCache);
这里面详细 http://blog.csdn.net/linmiansheng/article/details/21293699
posted on 2014-08-01 18:52 Top@Gragon 阅读(293) 评论(0) 编辑 收藏 举报