1.回顾
上篇已经学习了,RequestQueue , StringRequest ,JsonObjectRequest 的使用
2.重点
(1)Volley请求图片的三种方式
(2)ImageRequest
(3)ImageLoader 和 LruCache (缓存)的使用
(4)NetworkImageView (与ImageLoader合作)自定义布局文件 实现 图片请求
3.准备篇
这里还要使用 RequestQueue 来实现请求队列。
4.ImageRequest
(1)实例化 ImageRequest 对象
(2)设置参数 :这里的HttpPath.getPic() 是 URL图片地址
(3)请求成功后,回调 bitmap对象 直接可以赋值给 ImageView
(4)需要在 请求处理队列中执行
(5)默认图片可以在加载前设置好,错误图片可以在出错的时候设置
/**
* 03. imageRequest 请求一张图片
*/
private void imageRequest_get(){
ImageRequest imageRequest=new ImageRequest(HttpPath.getPic(),
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
// TODO Auto-generated method stub
imageView1.setImageBitmap(response);
}
},0,0,Config.RGB_565,new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
tv.setText(error.getMessage());
}
});
imageRequest.setTag("iamgerequest");
volleyApplication.getQueue().add(imageRequest);
}
5. ImageLoader 的使用
5.1优点
(1) 可以设置 出错的时候,显示的图片和设置默认图片!
(2) 图片缓存的实现
5.2 无缓存实现 加载一张图片
/**
* 4.imageloader ,无缓存的
* 优点是:图片缓存技术
*/
private void imageLoader_get(){
//设置 图片缓存 这里为 空的,没有使用 缓存
ImageCache cache=new ImageCache() {
@Override
public void putBitmap(String url, Bitmap bitmap) {
// 没有
}
@Override
public Bitmap getBitmap(String url) {
// 没有
return null;
}
};
//实例化对象
ImageLoader imageLoader=new ImageLoader(volleyApplication.getQueue(),cache);
// 图片监听 (默认图片,错误图片) 和 imageView
ImageListener imageListener=ImageLoader.getImageListener(imageView1,R.drawable.ic_launcher,R.drawable.ic_launcher);
//加载图片
imageLoader.get(HttpPath.getPic(),imageListener,0,0);
}
5.3 ImageLoader+LruCache 实现图片的加载和缓存
(1)实现ImageCache :这里新建一个类,继承自ImgaeCache
package com.example.Util;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.util.LruCache;
import com.android.volley.toolbox.ImageLoader.ImageCache;
@SuppressLint("NewApi")
public class BitmapCache implements ImageCache{
//使用LruCache 实现图片缓存 :
//使用地址:
//http://blog.csdn.net/guolin_blog/article/details/9316683
private LruCache<String,Bitmap> cache;
//设置最大的 尺寸值
public BitmapCache() {
//构造方法 实现 LruCache 缓存 图片
int maxSize=10*1024*1024;
cache=new LruCache<String,Bitmap>(maxSize){
@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);
}
}
(2)下面实现调用即可:
/**
* 4.2 将 imageLoader和 缓存联系在一起!
*/
private void imageLoader_cache(){
//设置 图片缓存 :体现 imageLoader的优势
//使用 LruBitmap + ImageCache 实现
//实例化对象
ImageLoader imageLoader=new ImageLoader(<span style="color:#ff0000;">volleyApplication.getQueue(),new BitmapCache()</span>);
// 图片监听 (默认图片,错误图片) 和 imageView
ImageListener imageListener=ImageLoader.getImageListener(imageView1,R.drawable.ic_launcher,R.drawable.ic_launcher);
//加载图片
imageLoader.get(HttpPath.getPic(),imageListener,0,0);
}
6.ImageLoader+NetWorkImageView 实现图片获取
(1)首先在布局文件里新添加 NetworkImageView 布局
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/network_image_view"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
/>
(2)初始化 控件
使用findViewByid 实现
(3)使用
这个方法是 传进来 图片名称,后通过Url 从服务器获取!很简单,需要实例化 ImageLoader;
/**
* 4.3 使用networkImageView 加载图片
*/
private void networkImageview_get(String pic){
<span style="color:#ff0000;">ImageLoader imageLoader=new ImageLoader(volleyApplication.getQueue(),new BitmapCache());</span>
network_image_view.setDefaultImageResId(R.drawable.ic_launcher);
network_image_view.setErrorImageResId(R.drawable.ic_launcher);
network_image_view.setImageUrl(HttpPath.getBasicPath()+"/"+pic,imageLoader);
}