简单点,说话的方式简单点……(《演员》薛之谦)
这篇博客,我们将学习一下Volley加载图片的介绍及用法。
我们新建一个项目VolleyImageDemo;这里我在写一下使用Volley框架的准备工作。
这样就可以使用Volley了。
同样,我们新建类继承自Application,并创建全局的请求队列,代码如下:
public class MyApplication extends Application {
public static RequestQueue queues;
@Override
public void onCreate() {
super.onCreate();
queues = Volley.newRequestQueue(getApplicationContext());
}
public static RequestQueue getHttpQueues() {
return queues;
}}
这里与Volley框架(上、中)中的请求队列无异,不再过多解释。
然后我们在MainActivivty的布局文件里创建一个普通的ImageView,代码如下:
然后我们在MainActivity.java里将其实例化,代码如下:
private ImageView iv_img;
iv_img = (ImageView) findViewById(R.id.iv_img);
下面我们创建一个ImagerRequest类,代码如下:
ImageRequest request = new ImageRequest(url, listener, maxWidth,maxHeight, decodeConfig, errorListener);
下面我们看一下ImagerRequest的6个参数:
下面我将参数填充一下,代码如下:
ImageRequest request = new ImageRequest(url, new Listener() {
@Override
public void onResponse(Bitmap response) {// 请求成功的监听事件
iv_img.setImageBitmap(response);
}
}, 0, 0, Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {// 请求失败的监听事件
iv_img.setBackgroundResource(R.drawable.ic_launcher);
}
});
这里的url我使用的图片网址为“private String url = "http://img3.imgtn.bdimg.com/it/u=2591627440,2371609101&fm=23&gp=0.jpg";
”;这里我让请求成功时,使ImageView控件显示这张图片,请求失败时先是ic_launcher;至于图片的宽高,我设置为0,将显示原始图片的宽高;图片编码格式我设置为RGB。
现在我们运行一下:
OK!
首先我们在MainActivity里创建一个ImageLoader,代码如下:
ImageLoader loader = new ImageLoader(queue, imageCache);
我们可以看到,ImagerLoader对象有两个参数:queue和imageCache,这里的queue就是请求队列,我么设置为MyApplication.getHttpQueues(),而imageCache很明显就是一个ImageCache的对象,但是ImageCache不能直接使用,需要借助LruCache,所以我们先新建类BitmapCache添加接口ImageCache,实现两个自带的方法:getBitmap和putBitmap,代码如下:
public class BitmapCache implements ImageCache {
public LruCache cache;
public int max = 10 * 1024;
public BitmapCache() {
cache = new LruCache(max) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}}
这里我们新建了一个LruCache对象,然后我们定义一个LruCache的最大缓存的内存大小:max,这里定义为10M,如果缓存的图片大于10M,它会自动回收;在getBitmap里我们返回缓存里的图片;在putBitmap里放入到LruCache里面;然后我们编写构造方法,构造方法里我们实例化LruCache,然后实现以下它里面的sizeOf,返回Bitmap的大小。
这样我们的缓存就写好了!
然后将ImageLoader对象的第二个参数填充一下,代码如下:
ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(),
new BitmapCache());
然后我们创建一个ImageListener,用来监听我们整个图片加载过程,代码如下:
ImageListener listener = ImageLoader.getImageListener(view, defaultImageResId, errorImageResId);
我们可以看到ImageListener对象有三个参数:
好了,我们填充一下,代码如下:
ImageListener listener = ImageLoader.getImageListener(iv_img,
R.drawable.ic_launcher, R.drawable.ic_launcher);
这里我们的默认加载图片和加载出错的图片都设置为ic_launcher。
下面我们就要加载我们的网络图片,代码如下:
loader.get(requestUrl, listener);
loader.get(requestUrl, imageListener, maxWidth, maxHeight);
我们可以看到ImageLoader的构造方法有两种,四个参数的构造方法多了maxWidth和maxHeight,是自定义图片的宽高,这里我们使用两个参数的构造方法,代码如下:
loader.get(url, listener);
第一个参数是图片的url,第二个参数就是ImageListener的对象。
完成!我们运行一下:
这样就是一个完整的网络图片请求了!
我们首先需要创建一个控件,代码如下:
然后我们绑定一下控件,代码如下:
private NetworkImageView netImageView;
netImageView = (NetworkImageView) findViewById(R.id.networkImageView);
NetworkImageView用起来就比较简单了,我们使用它的setImageUrl()方法,代码如下:
netImageView.setImageUrl(url, imageLoader);
第一个参数就是图片的url,而第二个参数我们发现是ImageLoader对象,所以我们在使用NetworkImageView时也需要使用ImageLoader,这里我们使用刚刚写好的ImageLoader,这样就可以使用了,另外我们可以用setDefaultImageResId()方法设置一下加载的默认图片,使用setErrorImageResId()方法设置一下加载失败的图片,代码如下:
ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(),
new BitmapCache());
netImageView.setDefaultImageResId(R.drawable.ic_launcher);
netImageView.setErrorImageResId(R.drawable.ic_launcher);
netImageView.setImageUrl(url, loader);
这里的默认图片和加载失败图片我还是使用的ic_launcher。
好了,运行程序:
让网络请求简单点——Volley框架(上)
让网络请求简单点——Volley框架(中)
袁程序猿的CSDN博客:安卓学习心得
往期回顾:
让网络请求简单点——Volley框架(中)
让网络请求简单点——Volley框架(上)
让你的电脑变成windows+安卓双系统
安卓四大组件——ContentProvider
SQLite详解
小程序发布,你方了吗?
安卓四大组件——Service(服务)
安卓四大组件——BroadcastReceiver(广播)
搞懂 res ->values + res ->drawable : 资源
界面美化 —— 布局
Intent——把两个Activity关联起来!
常用控件
关于Activity的生命周期