經過使用Universal-Image-Loader實現圖片異步加載,如今這個比較主流。android
下面是轉載地址:https://github.com/nostra13/Android-Universal-Image-Loadergit
在圖片加載中,主要用到下面的類(兩個類使用其中一個),下面寫一下這兩個類中主要的一些方法,在正式寫項目中不須要把我說的這些方法都用上。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();
這裏有篇詳細介紹的文章比較好:動畫
還有一個應用 Demo的文章:ui