昨天学习了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 //获取第三方的ImageLoader20 private ImageLoader imageLoader;21 //初始化实例22 private WXHKdemo(){23 //new出来一个实例,来让下面调用不出现空指针,24 imageLoader = ImageLoader.getInstance();25 }26 27 /**28 * 单例29 * @return30 */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) // default49 .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()) // default55 .build();56 /**57 * 显示图片58 * @param url59 * @param imageView60 */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 url78 * @param imagelo79 */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 @Override27 public int getCount() {28 return imageUrls.length;29 }30 31 @Override32 public String getItem(int position) {33 return imageUrls[position];34 }35 36 @Override37 public long getItemId(int position) {38 return position;39 }40 41 @Override42 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 }
写的有点乱,以后在整理