Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Universal-Image-Loader初級使用

Android Universal-Image-Loader初級使用

編輯:關於Android編程

 

其主要特征:

 

  1. 多線程下載圖片,圖片可以來源於網絡,文件系統,項目文件夾assets中以及drawable中等支持隨意的配置ImageLoader,例如線程池,圖片下載器,內存緩存策略,硬盤緩存策略,圖片顯示選項以及其他的一些配置支持圖片的內存緩存,文件系統緩存或者SD卡緩存支持圖片下載過程的監聽根據控件(ImageView)的大小對Bitmap進行裁剪,減少Bitmap占用過多的內存較好的控制圖片的加載過程,例如暫停圖片加載,重新開始加載圖片,一般使用在ListView,GridView中,滑動過程中暫停加載圖片,停止滑動的時候去加載圖片提供在較慢的網絡下對圖片進行加載

     

     

    簡單使用:

    1.新建一個Android appication.名字叫IApplicaiton.

    2.把下載下來的項目裡的sample裡的libs下的jar拷貝到此項目中。

    3.新建一個類MyApplicaiton繼承application:

     

    package com.example.iapplication;
    
    import com.nostra13.universalimageloader.core.ImageLoader;
    import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
    
    import android.app.Application;
    
    public class MyApplication extends Application {
    	 @Override  
    	    public void onCreate() {  
    	        super.onCreate();  
    	  
    	        //創建默認的ImageLoader配置參數  
    	        ImageLoaderConfiguration configuration = ImageLoaderConfiguration  
    	                .createDefault(this);  
    	          
    	        //Initialize ImageLoader with configuration.  
    	        ImageLoader.getInstance().init(configuration);  
    	    }  
    }
    

    4.配置mainfest.xml文件:

     

     

    
    
    	
        
    	   
    	   
         
        
            
                
                    
    
                    
                
            
        
    
    
    
    注意application節點和權限的加入。

     

    接下來,加載圖片。

    5.定義一個layout布局:

     

    
    <framelayout android:layout_height="fill_parent" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
    
        
    
    </framelayout>

    6.使用displayImage()加載圖片:

     

     

    //使用displayImage方法加載
    	public void advanceLoad2(){
    		final ImageView mImageView = (ImageView) findViewById(R.id.image);  
            String imageUrl = http://smartcost.com.cn/global/upload/img/20150206/14223432211081942.jpg;  
            //顯示圖片的配置  
            DisplayImageOptions options = new DisplayImageOptions.Builder()  
                    .showImageOnLoading(R.drawable.ic_stub)  
                    .showImageOnFail(R.drawable.ic_error)  
                    .cacheInMemory(true)  
                    .cacheOnDisk(true)  
                    .bitmapConfig(Bitmap.Config.RGB_565)  
                    .build();  
    
              
            ImageLoader.getInstance().displayImage(imageUrl, mImageView, options);  
    	}

    搞定。如果有需要顯示加載圖片進度的話,只需要在displayImage()方法中傳入ImageLoadingProgressListener接口就行了:

     

     

    imageLoader.displayImage(imageUrl, mImageView, options, new SimpleImageLoadingListener(), new ImageLoadingProgressListener() {  
                  
                @Override  
                public void onProgressUpdate(String imageUri, View view, int current,  
                        int total) {  
                      
                }  
            });  

    加載其他資源的圖片:

     

     

     String imagePath = /mnt/sdcard/image.png;  
            String imageUrl = Scheme.FILE.wrap(imagePath);  
              
    //      String imageUrl = http://img.my.csdn.net/uploads/201309/01/1378037235_7476.jpg;  
              
            imageLoader.displayImage(imageUrl, mImageView, options);  

    //圖片來源於Content provider  
            String contentprividerUrl = content://media/external/audio/albumart/13;  
              
            //圖片來源於assets  
            String assetsUrl = Scheme.ASSETS.wrap(image.png);  
              
            //圖片來源於  
            String drawableUrl = Scheme.DRAWABLE.wrap(R.drawable.image);  
    
    
    當我們快速滑動GridView,ListView,我們希望能停止圖片的加載,而在GridView,ListView停止滑動的時候加載當前界面的圖片,這個框架當然也提供這個功能,使用起來也很簡單,它提供了PauseOnScrollListener這個類來控制ListView,GridView滑動過程中停止去加載圖片

     

     

    listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));  
            gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling)); 

    第一個參數就是我們的圖片加載對象ImageLoader, 第二個是控制是否在滑動過程中暫停加載圖片,如果需要暫停傳true就行了,第三個參數控制猛的滑動界面的時候圖片是否加載

     

     

    OutOfMemoryError

     

    雖然這個框架有很好的緩存機制,有效的避免了OOM的產生,一般的情況下產生OOM的概率比較小,但是並不能保證OutOfMemoryError永遠不發生,這個框架對於OutOfMemoryError做了簡單的catch,保證我們的程序遇到OOM而不被crash掉,但是如果我們使用該框架經常發生OOM,我們可以使用一下方式去改善。

     

    • 減少線程池中線程的個數,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推薦配置1-5在DisplayImageOptions選項中配置bitmapConfig為Bitmap.Config.RGB_565,因為默認是ARGB_8888, 使用RGB_565會比使用ARGB_8888少消耗2倍的內存在ImageLoaderConfiguration中配置圖片的內存緩存為memoryCache(new WeakMemoryCache()) 或者不使用內存緩存在DisplayImageOptions選項中設置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)

       

      我們在使用該框架的時候盡量的使用displayImage()方法去加載圖片,loadImage()是將圖片對象回調到ImageLoadingListener接口的onLoadingComplete()方法中,需要我們手動去設置到ImageView上面,displayImage()方法中,對ImageView對象使用的是Weak references,方便垃圾回收器回收ImageView對象,如果我們要加載固定大小的圖片的時候,使用loadImage()方法需要傳遞一個ImageSize對象,而displayImage()方法會根據ImageView對象的測量值,或者android:layout_width and android:layout_height設定的值,或者android:maxWidth and/or android:maxHeight設定的值來裁剪圖片


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved