Android-Volley网络通信框架(ImageRequest,ImageLoader,NetWorkImageView)

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 从server获取!非常easy,须要实例化 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);
        
	}


原文地址:https://www.cnblogs.com/zsychanpin/p/7039444.html