• 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);
            
    	}


  • 相关阅读:
    漫谈程序员系列:咦,你也在混日子啊
    JVM加载class文件的原理机制
    maven编译的时候排除junit测试类
    mysql之——存储过程 + 游标 + 事务
    JSP页面之${fn:}内置函数
    生成24位字符串ID__IdGenerator.java
    oracle创建用户,表空间,虚拟路径,导入dbf
    eclipse手动修改默认工作空间
    资源
    http协议发送header+body+json及接收解析
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7039444.html
Copyright © 2020-2023  润新知