圖片異步加載

經過使用Universal-Image-Loader實現圖片異步加載,如今這個比較主流。android

下面是轉載地址:https://github.com/nostra13/Android-Universal-Image-Loadergit

Universal-Image-Loader

在圖片加載中,主要用到下面的類(兩個類使用其中一個),下面寫一下這兩個類中主要的一些方法,在正式寫項目中不須要把我說的這些方法都用上。github

其中一個類是:緩存

DisplayImageOptions

這個類中的主要方法有:異步

DisplayImageOptions options = new DisplayImageOptions.Builder()
        .showImageOnLoading(R.drawable.ic_stub) // 設置正在加載的圖片資源
        .showImageForEmptyUri(R.drawable.ic_empty) // 設置圖上資源爲空時加載的圖片資源
        .showImageOnFail(R.drawable.ic_error) // 設置加載失敗的圖片資源
        .resetViewBeforeLoading(false)  // 設置圖片在下載前是否重置
        .delayBeforeLoading(1000)//設置延時多少時間後開始下載
        .cacheInMemory(false) // 設置下載的資源是否緩存在內存中
        .cacheOnDisk(false) // 設置下載的資源是否緩存在SD卡中
        .preProcessor(...)  // 設置圖片加入緩存前,對bitmap進行設置
        .postProcessor(...) // 設置顯示前的圖片,顯示後這個圖片一直保留在緩存中
        .extraForDownloader(...) // 設置額外的內容給ImageDownloader
        .considerExifParams(false) // 是否考慮JPEG圖像EXIF參數(旋轉,翻轉)
        .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // 設置圖片以何種編碼方式顯示
        .bitmapConfig(Bitmap.Config.ARGB_8888) // 設置圖片的解碼類型
        .decodingOptions(...) // 設置圖片的解碼配置 
                                  例如 android.graphics.BitmapFactory.Options decodingOptions 
        .displayer(new SimpleBitmapDisplayer()) // 設置顯示方式(樣式或者動畫等)
                                例如:RoundedBitmapDisplayer(int roundPixels)設置圓角圖片
                                      FakeBitmapDisplayer()這個類什麼都沒作
                                      RoundedBitmapDisplayer(int radian) 設置爲圓角,弧度爲多少  
                                      FadeInBitmapDisplayer(int durationMillis)設置圖片漸顯的時間
                                 SimpleBitmapDisplayer()正常顯示一張圖片
        .handler(new Handler()) // Handler事件
        .build();

另外一個類是 ide

ImageLoaderConfiguration

這個類中的主要方法有:post

File cacheDir = StorageUtils.getCacheDirectory(context);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
        .memoryCacheExtraOptions(maxWidth, maxHeight) // 緩存圖片的最大寬度,最大高度,
        .diskCacheExtraOptions(480, 800, null)
        .taskExecutor(...)  //  添加線程池,進行下載,若是進行了這個設置,
                                那麼threadPoolSize(int),threadPriority(int),
                                tasksProcessingOrder(QueueProcessingType)將不會起做用
        .taskExecutorForCachedImages(...)// 下載緩存圖片
        .threadPoolSize(3) // 設置用於顯示圖片的線程池大小
        .threadPriority(Thread.NORM_PRIORITY - 1) //  設置線程的優先級
        .tasksProcessingOrder(QueueProcessingType.FIFO) // 設置圖片加載和顯示隊列處理的類型 
                                                        // 默認爲QueueProcessingType.FIFO
                                                        // 注:若是設置了taskExecutor或者
                                                          taskExecutorForCachedImages 此設置無效
        .denyCacheImageMultipleSizesInMemory() // 設置是否容許在內存中緩存多個圖片大小 
                                                  默認爲容許,(同一個圖片URL)根據不一樣大小
                                                  的imageview保存不一樣大小圖片
        .memoryCache(new LruMemoryCache(2 * 1024 * 1024))// 設置內存緩存 
                                                            默認爲一個當前應用可用內存的1/8大小的
        .memoryCacheSize(2 * 1024 * 1024)// 設置SD緩存的最大大小 默認爲一個當前應用可用內存的1/8
        .memoryCacheSizePercentage(13) // 設置內存緩存最大大小佔當前應用可用內存的百分比 
                                          默認爲一個當前應用可用內存的1/8
        .diskCache(new UnlimitedDiscCache(cacheDir)) // default
        .diskCacheSize(50 * 1024 * 1024)
        .diskCacheFileCount(100)
        .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
        .imageDownloader(new BaseImageDownloader(context)) // 設置圖片下載器
        .imageDecoder(new BaseImageDecoder()) // 設置圖片解碼器
        .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // 設置默認的圖片顯示選項
        .writeDebugLogs() // 打印DebugLogs
        .build();

這裏有篇詳細介紹的文章比較好:動畫

Android-Universal-Image-Loader 圖片異步加載類庫的使用(超詳細配置)

還有一個應用 Demo的文章:ui

http://blog.csdn.net/wwj_748/article/details/10079311

相關文章
相關標籤/搜索