zoukankan      html  css  js  c++  java
  • 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);
            
    	}


  • 相关阅读:
    <Redis> 入门六 主从复制方式的集群
    <Redis> 入门五 持久化RBD/AOF
    <Redis> 入门四 Jedis操作Redis
    <Redis> 入门三 事务
    <Redis> 入门X 分布式锁
    <Redis> 入门二 五种数据类型的操作、通用key的操作、发布订阅
    <Redis> 入门一 概念安装
    <Linux> 下安装和卸载JDK
    <ActiveMQ>
    <linux>入门
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7039444.html
Copyright © 2011-2022 走看看