安卓新的联网方式 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编辑  收藏  举报

导航