Volley提供了一個NetworkImageView類。java
利用NetworkImageView這個類,能夠更有效率地去從網絡去獲取圖片,由於它裏面幫咱們多設置了一個緩存,但這緩存得本身實現。android
1)xml文件:緩存
<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>
2)Activity中使用:網絡
networkImageView = (NetworkImageView) findViewById(R.id.nivTestView); mQueue = Volley.newRequestQueue(this); LruImageCache lruImageCache = LruImageCache.instance(); ImageLoader imageLoader = new ImageLoader(mQueue,lruImageCache); networkImageView.setDefaultImageResId(R.drawable.ic_launcher); networkImageView.setErrorImageResId(R.drawable.ic_launcher); networkImageView.setImageUrl(URLS[1], imageLoader);
3)實現LruImageCache類ide
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); } } }