昨天学习了universal_image_loader图片加载框架,今天把所学的和大家分享一下,
首先需要新建一个APP文件继承与Application
代码如下
1 package com.wuxianedu.auniversalimageloader; 2 3 import android.app.Application; 4 import android.graphics.Bitmap; 5 import android.os.Handler; 6 import android.util.Log; 7 8 import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache; 9 import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator; 10 import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache; 11 import com.nostra13.universalimageloader.core.DisplayImageOptions; 12 import com.nostra13.universalimageloader.core.ImageLoader; 13 import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 14 import com.nostra13.universalimageloader.core.assist.ImageScaleType; 15 import com.nostra13.universalimageloader.core.assist.QueueProcessingType; 16 import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; 17 import com.nostra13.universalimageloader.core.download.BaseImageDownloader; 18 import com.nostra13.universalimageloader.utils.StorageUtils; 19 20 import java.io.File; 21 22 /** 23 * Created by terry-song on 2016/10/7. 24 * 25 * 使用universal-imageloader 26 * 1.引入 27 * 2.初始化ImageLoader 28 * 3.调用方法加载图片 29 */ 30 31 public class App extends Application { 32 33 private static final String TAG = "--Main--"; 34 35 @Override 36 public void onCreate() { 37 super.onCreate(); 38 39 // createDefaultImageLoaderConfiguration(); 40 41 DisplayImageOptions options = new DisplayImageOptions.Builder() 42 .showImageOnLoading(R.drawable.image_nor) // 设置图片下载期间显示的图片 43 .showImageForEmptyUri(R.drawable.image_nor) // 设置图片Uri为空或是错误的时候显示的图片 44 .showImageOnFail(R.drawable.image_nor) // 设置图片加载或解码过程中发生错误显示的图片 45 .resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位 46 .delayBeforeLoading(200) // 下载前的延迟时间 47 .cacheInMemory(true) // default 设置下载的图片是否缓存在内存中 48 .cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中 49 .considerExifParams(false) // default 50 .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示 51 .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型 52 // .displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20) 53 .displayer(new FadeInBitmapDisplayer(200))// 图片加载好后渐入的动画时间 54 //.displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 55 .handler(new Handler()) // default 56 .build(); 57 58 //设置图片缓存路径 59 File cacheDir = StorageUtils.getCacheDirectory(this); 60 61 Log.e(TAG, "onCreate: cacheDir===="+cacheDir ); 62 //自定义ImageLoaderConfiguration配置 63 ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this) 64 .memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大宽、高 65 // .diskCacheExtraOptions(480, 800, null) // 本地缓存的详细信息(缓存的最大宽、高),最好不要设置这个 66 .threadPoolSize(4) // default 线程池内加载的数量 67 // .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级 68 .tasksProcessingOrder(QueueProcessingType.FIFO) // default 69 .denyCacheImageMultipleSizesInMemory() 70 .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现 71 .memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值 72 .memoryCacheSizePercentage(13) // default 73 //可以自定义缓存路径 74 .diskCache(new UnlimitedDiskCache(cacheDir)) 75 .diskCacheSize(100 * 1024 * 1024) // 100 Mb sd卡(本地)缓存的最大值 76 // .diskCacheFileCount(100) // 可以缓存的文件数量 77 // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密 78 .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) 79 // .connectTimeout (5 s), readTimeout (30 s) //超时时间 80 //第二个参数:连接超时时间,第三个参数:读取超时时间 81 .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) 82 .defaultDisplayImageOptions(options) 83 .writeDebugLogs() // 打印debug log 84 .build(); //开始构建 85 86 //初始化ImageLoader 87 ImageLoader.getInstance().init(configuration); 88 89 } 90 91 /** 92 * 创建默认的ImageLoaderConfiguration 93 * 对ImageLoader进行初始化 94 */
//默认的初始化方法,上面那些事自定义的 95 private void createDefaultImageLoaderConfiguration() { 96 //创建默认的ImageLoaderConfiguration 97 ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this); 98 //初始化ImageLoader 99 ImageLoader.getInstance().init(configuration); 100 } 101 }
之后新建一个Java文件
WXHKdemo.java
1 package com.wuxianedu.auniversalimageloader; 2 3 import android.graphics.Bitmap; 4 import android.os.Handler; 5 import android.widget.ImageView; 6 7 import com.nostra13.universalimageloader.core.DisplayImageOptions; 8 import com.nostra13.universalimageloader.core.ImageLoader; 9 import com.nostra13.universalimageloader.core.assist.ImageScaleType; 10 import com.nostra13.universalimageloader.core.assist.ImageSize; 11 import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; 12 import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; 13 14 /** 15 * Created by Administrator on 2016/10/7. 16 */ 17 public class WXHKdemo { 18 private static WXHKdemo wxhlImageLoader; 19 //获取第三方的ImageLoader 20 private ImageLoader imageLoader; 21 //初始化实例 22 private WXHKdemo(){ 23 //new出来一个实例,来让下面调用不出现空指针, 24 imageLoader = ImageLoader.getInstance(); 25 } 26 27 /** 28 * 单例 29 * @return 30 */ 31 public static synchronized WXHKdemo getInstance(){ 32 // return wxhlImageLoader; 33 if(wxhlImageLoader == null){ 34 wxhlImageLoader = new WXHKdemo(); 35 } 36 return wxhlImageLoader; 37 38 39 } 40 private DisplayImageOptions options = new DisplayImageOptions.Builder() 41 .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片 42 .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片 43 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片 44 .resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位 45 .delayBeforeLoading(200) // 下载前的延迟时间 46 .cacheInMemory(true) // default 设置下载的图片是否缓存在内存中 47 .cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中 48 .considerExifParams(false) // default 49 .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示 50 .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型 51 // .displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20) 52 .displayer(new FadeInBitmapDisplayer(200))// 图片加载好后渐入的动画时间 53 // .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 54 .handler(new Handler()) // default 55 .build(); 56 /** 57 * 显示图片 58 * @param url 59 * @param imageView 60 */ 61 public void displayHeaderImage(String url, ImageView imageView){ 62 imageLoader.displayImage(url,imageView,options); 63 } 64 65 /** 66 * 显示图片,带监听器 67 * 68 * @param imageView 组件 69 * 70 */ 71 public void displayImage(String imageUrl, ImageView imageView){ 72 imageLoader.displayImage(imageUrl,imageView); 73 } 74 75 /** 76 * 加载图片,带监听器 77 * @param url 78 * @param imagelo 79 */ 80 public void loadImage (String url,SimpleImageLoadingListener imagelo){ 81 imageLoader.loadImage(url,imagelo); 82 } 83 84 85 public void loadImage(String url,int gao,int kuan,SimpleImageLoadingListener imagelo){ 86 ImageSize imageSize = new ImageSize(gao,kuan); 87 imageLoader.loadImage(url,imageSize,imagelo); 88 } 89 90 }
调用方法
1 package com.wuxianedu.auniversalimageloader; 2 3 import android.content.Context; 4 import android.view.LayoutInflater; 5 import android.view.View; 6 import android.view.ViewGroup; 7 import android.widget.BaseAdapter; 8 import android.widget.ImageView; 9 10 /** 11 * Created by terry-song on 2016/9/29. 12 */ 13 14 public class ImageAdapter extends BaseAdapter { 15 16 private final WXHKdemo wxhlImageLoader; 17 private Context context; 18 private String[] imageUrls; 19 20 public ImageAdapter(Context context, String[] imageUrls) { 21 this.context = context; 22 this.imageUrls = imageUrls; 23 wxhlImageLoader = WXHKdemo.getInstance(); 24 } 25 26 @Override 27 public int getCount() { 28 return imageUrls.length; 29 } 30 31 @Override 32 public String getItem(int position) { 33 return imageUrls[position]; 34 } 35 36 @Override 37 public long getItemId(int position) { 38 return position; 39 } 40 41 @Override 42 public View getView(int position, View convertView, ViewGroup parent) { 43 ViewHolder viewHolder; 44 if(convertView == null){ 45 viewHolder = new ViewHolder(); 46 convertView = LayoutInflater.from(context).inflate(R.layout.item_view,null); 47 viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_id); 48 convertView.setTag(viewHolder); 49 }else{ 50 viewHolder = (ViewHolder) convertView.getTag(); 51 } 52 ImageView imageView = viewHolder.imageView; 53 54 // TODO: 2016/9/29 设置图片 55 if(position %2 == 0){ 56 //使用之前WXHKdemo里面的方法 57 wxhlImageLoader.displayImage(imageUrls[position],imageView); 58 }else{ 59 //使用之前WXHKdemo里面的方法 60 wxhlImageLoader.displayHeaderImage(imageUrls[position],imageView); 61 } 62 63 64 return convertView; 65 } 66 67 class ViewHolder { 68 ImageView imageView; 69 } 70 }
写的有点乱,以后在整理