Volley框架在请求网络图片方面也做了很多工作,提供了好几种方法.本文介绍使用ImageLoader来进行网络图片的加载.
ImageLoader的内部使用ImageRequest来实现,它的构造器可以传入一个ImageCache缓存形参,实现了图片缓存的功能,同时还可以过滤重复链接,避免重复发送请求。
下面是ImageLoader加载图片的实现方法:
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.game_achieve_grade, R.mipmap.game_achieve_grade);
imageLoader.get("http://www.xxjxsj.cn/article/UploadPic/2009-10/2009101018545196251.jpg", listener);
使用ImageLoader.getImageListener()方法创建一个ImageListener实例后,在imageLoader.get()方法中加入此监听器和图片的url,即可加载网络图片.
下面是使用LruCache实现的缓存类
public class BitmapCache implements ImageCache {
private LruCache<String, Bitmap> cache;
public BitmapCache() {
cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
}
最后,别忘记在AndroidManifest.xml文件中加入访问网络的权限
public class ImageLoaderActivity extends AppCompatActivity {
private ImageView imageView;
private NetworkImageView networkImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imageloader);
imageView = (ImageView) findViewById(R.id.image_view);
networkImageView = (NetworkImageView) findViewById(R.id.netimage);
Button btnGetImage = (Button) findViewById(R.id.get_image);
btnGetImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.game_achieve_grade, R.mipmap.game_achieve_grade);
imageLoader.get("http://www.xxjxsj.cn/article/UploadPic/2009-10/2009101018545196251.jpg", listener);
//下面这一句也可以加载图片,只是没用到listener
// networkImageView.setImageUrl("http://pica.nipic.com/2007-11-09/200711912453162_2.jpg", imageLoader);
}
});
}
public class BitmapCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> cache;
public BitmapCache() {
cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/get_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="获取图片"/>
<com.android.volley.toolbox.NetworkImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/netimage">
</com.android.volley.toolbox.NetworkImageView>
<ImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/game_achieve_horse"/>
</LinearLayout>
详细介绍可查看:点击查看