修改图片加载工具类

This commit is contained in:
zengfantian 2015-01-26 18:59:49 +08:00
parent b02a5e9b96
commit 028213e973
2 changed files with 119 additions and 155 deletions

View File

@ -10,11 +10,10 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.zftlive.android.R;
import com.zftlive.android.base.BaseActivity;
import com.zftlive.android.base.BaseAdapter;
import com.zftlive.android.tools.ToolImage;
/**
* 异步加载图片示例DEMO防止图片错位
@ -70,7 +69,6 @@ public class ImageListviewActivity extends BaseActivity {
"多途网络科技 15K 招聘前端开发工程师",
"携程无线前端团队招聘 直接内部推荐(携程上海总部)"
};
private DisplayImageOptions mDisplayImageOptions;
private com.nostra13.universalimageloader.core.ImageLoader universalimageloader;
@Override
@ -84,14 +82,8 @@ public class ImageListviewActivity extends BaseActivity {
mMyListViewAdapter = new MyListViewAdapter();
mListView = (ListView)findViewById(R.id.lv_list);
mDisplayImageOptions = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.ic_launcher).cacheInMemory()
.cacheOnDisc().build();
ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(this).enableLogging().build();
universalimageloader = com.nostra13.universalimageloader.core.ImageLoader.getInstance();
universalimageloader.init(imageLoaderConfiguration);
//图片异步加载器
universalimageloader = ToolImage.initImageLoader(getApplicationContext());
}
@Override
@ -142,8 +134,7 @@ public class ImageListviewActivity extends BaseActivity {
// mImageLoader.get((String)rowData.get("imageUrl"), mImageListener);
//异步加载图片防止错位方法二com.nostra13.universalimageloader.core.ImageLoader
universalimageloader.displayImage((String)rowData.get("imageUrl"), mViewHolder.iv_icon, mDisplayImageOptions);
universalimageloader.displayImage((String)rowData.get("imageUrl"), mViewHolder.iv_icon, ToolImage.getFadeOptions(R.drawable.default_icon,R.drawable.ic_launcher,R.drawable.ic_launcher));
mViewHolder.tv_title.setText((String)rowData.get("title"));
return convertView;
}

View File

@ -1,165 +1,138 @@
package com.zftlive.android.tools;
import android.content.Context;
import android.widget.ImageView;
import java.io.File;
import android.content.Context;
import android.graphics.Bitmap;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.utils.StorageUtils;
/**
* 图片加载工具类
* @author 曾繁添
* @version 1.0
*
*/
public abstract class ToolImage {
private static ImageLoader imageLoader;
private static DisplayImageOptions displayImageOptions;
private static DisplayImageOptions displayImageOptions1;
private static DisplayImageOptions displayImageOptions2;
private static DisplayImageOptions displayImageOptions3;
private static DisplayImageOptions displayImageOptions4;
private static DisplayImageOptions displayImageOptions5;
public static void init(Context context, int stubImage,
int imageForEmptyUri, int imageOnFail) {
ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(
context)
// 如果图片尺寸大于了这个参数那么就会这按照这个参数对图片大小进行限制并缓存
// .memoryCacheExtraOptions(480, 800) // default=device screen
// dimensions
// .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75)
// .taskExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
// .taskExecutorForCachedImages(AsyncTask.THREAD_POOL_EXECUTOR)
// .threadPoolSize(3) // default
// .threadPriority(Thread.NORM_PRIORITY - 1) // default
// .tasksProcessingOrder(QueueProcessingType.FIFO) // default
/**
* 初始化ImageLoader
*/
public static ImageLoader initImageLoader(Context context) {
// 获取到缓存的目录地址
File cacheDir = StorageUtils.getOwnCacheDirectory(context,"ImageLoader/Cache");
// 创建配置ImageLoader,可以设定在Application设置为全局的配置参数
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(480, 800)//缓存文件的最大长宽
// Can slow ImageLoader, use it carefully (Better don't use it)设置缓存的详细信息最好不要设置这个
// .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75,null)
.threadPoolSize(3)// 线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2)// 线程优先级
/*
* When you display an image in a small ImageView and later you
* try to display this image (from identical URI) in a larger
* ImageView so decoded image of bigger size will be cached in
* memory as a previous decoded image of smaller size. So the
* default behavior is to allow to cache multiple sizes of one
* image in memory. You can deny it by calling this method: so
* when some image will be cached in memory then previous cached
* size of this image (if it exists) will be removed from memory
* cache before.
*/
// .denyCacheImageMultipleSizesInMemory()
// .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
// .memoryCacheSize(2 * 1024 * 1024)
// .discCache(
// new
// LimitedAgeDiscCache(Environment.getExternalStorageDirectory(),
// 5 * 60))
// .discCache(new
// UnlimitedDiscCache(Environment.getExternalStorageDirectory()))
// .discCacheSize(50 * 1024 * 1024)
// .discCacheFileCount(50)
// .discCacheFileNameGenerator( new HashCodeFileNameGenerator())
// // default
// .imageDownloader(new BaseImageDownloader(context)) // default
// .imageDecoder(new BaseImageDecoder()) // default
// .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
// // default
.enableLogging().build();
ImageLoader.getInstance().init(imageLoaderConfiguration);
// You can pass your own memory cache implementation
.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 *1024))
.memoryCacheSize(2 * 1024 * 1024)
.discCacheSize(20 * 1024 * 1024)// 硬盘缓存50MB
.discCacheFileNameGenerator(new HashCodeFileNameGenerator())// 将保存的时候的URI名称用MD5
.tasksProcessingOrder(QueueProcessingType.LIFO)
.discCacheFileCount(100)// 缓存的File数量
.discCache(new UnlimitedDiscCache(cacheDir))// 自定义缓存路径
//.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
//.imageDownloader(new BaseImageDownloader(context, 5 * 1000,30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间
.build();
// 全局初始化此配置
imageLoader = ImageLoader.getInstance();
displayImageOptions = new DisplayImageOptions.Builder()
// 设置图片在下载期间显示的图片
.showStubImage(stubImage) // 在显示真正的图片前会加载这个资源
// 设置图片Uri为空或是错误的时候显示的图片
.showImageForEmptyUri(imageForEmptyUri) // 空的Url时
// 设置图片加载/解码过程中错误时候显示的图片
.showImageOnFail(imageOnFail)
// .resetViewBeforeLoading() //
// .delayBeforeLoading(1000) // 延长1000ms 加载图片 想不出来用在什么场景下
// 设置下载的图片是否缓存在内存中
.cacheInMemory()
// 设置下载的图片是否缓存在SD卡中
// .cacheOnDisc()
// .preProcessor(...)
// .postProcessor(...)
// .extraForDownloader(...) //可以向加载器携带一些参数
// .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) //
// default
// .bitmapConfig(Bitmap.Config.ARGB_8888) // default
// .decodingOptions(...)
// .displayer(new SimpleBitmapDisplayer()) // default
// .handler(new Handler()) // default
.build();
// //设置图片在下载前是否重置复位
// resetViewBeforeLoading()
// //设置图片的解码类型
// bitmapConfig(Bitmap.Config.RGB_565)
// //设置图片的解码配置
// decodingOptions(android.graphics.BitmapFactory.Options
// decodingOptions)
// //设置图片下载前的延迟
// delayBeforeLoading(int delayInMillis)
// //设置额外的内容给ImageDownloader
// extraForDownloader(Object extra)
// //设置图片加入缓存前对bitmap进行设置
// preProcessor(BitmapProcessor preProcessor)
// //设置显示前的图片显示后这个图片一直保留在缓存中
// postProcessor(BitmapProcessor postProcessor)
// //设置图片以如何的编码方式显示
// imageScaleType(ImageScaleType imageScaleType)
}
public static void settingInit1(int stubImage, int imageForEmptyUri,
int imageOnFail) {
displayImageOptions1 = new DisplayImageOptions.Builder()
.showStubImage(stubImage)
.showImageForEmptyUri(imageForEmptyUri)
.showImageOnFail(imageOnFail).cacheInMemory().build();
imageLoader.init(config);
return imageLoader;
}
public static void settingInit2(int stubImage, int imageForEmptyUri,
int imageOnFail) {
displayImageOptions2 = new DisplayImageOptions.Builder()
.showStubImage(stubImage)
.showImageForEmptyUri(imageForEmptyUri)
.showImageOnFail(imageOnFail).cacheInMemory().build();
/**
* 获取渐现显示选项
* @param loadingImageResId 加载期间显示的图片
* @param errorImageResid 加载错误时显示的图片
* @param emptyImageResId 空图片或者解析图片出错时显示的图片
* @return
*/
public static DisplayImageOptions getFadeOptions(int loadingImageResId,int errorImageResid,int emptyImageResId ) {
DisplayImageOptions options = new DisplayImageOptions.Builder()
//设置图片在下载期间显示的图片
.showStubImage(loadingImageResId)
// 设置图片加载/解码过程中错误时候显示的图片
.showImageOnFail(errorImageResid)
// 设置图片Uri为空或是错误的时候显示的图片
.showImageForEmptyUri(emptyImageResId)
// 设置下载的图片是否缓存在内存中
.cacheInMemory()
// 设置下载的图片是否缓存在SD卡中
.cacheOnDisc()
/**设置图片缩放方式
EXACTLY :图像将完全按比例缩小到目标大小
EXACTLY_STRETCHED:图片会缩放到目标大小完全
IN_SAMPLE_INT:图像将被二次采样的整数倍
IN_SAMPLE_POWER_OF_2:图片将降低2倍直到下一减少步骤使图像更小的目标大小
NONE:图片不会调整
***/
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
// 设置图片的解码类型
.bitmapConfig(Bitmap.Config.RGB_565)
// 设置图片下载前的延迟
.delayBeforeLoading(100)
// delayInMillis为你设置的延迟时间
// 设置图片加入缓存前对bitmap进行设置
// .preProcessor(BitmapProcessor preProcessor)
/**
* 图片显示方式
* RoundedBitmapDisplayerint roundPixels设置圆角图片
* FakeBitmapDisplayer这个类什么都没做
* FadeInBitmapDisplayerint durationMillis设置图片渐显的时间
     * SimpleBitmapDisplayer()正常显示一张图片
**/
.displayer(new FadeInBitmapDisplayer(100))// 渐显--设置图片渐显的时间
.build();
return options;
}
public static void settingInit3(int stubImage, int imageForEmptyUri,
int imageOnFail) {
displayImageOptions3 = new DisplayImageOptions.Builder()
.showStubImage(stubImage)
.showImageForEmptyUri(imageForEmptyUri)
.showImageOnFail(imageOnFail).cacheInMemory().build();
}
public static void settingInit4(int stubImage, int imageForEmptyUri,
int imageOnFail) {
displayImageOptions4 = new DisplayImageOptions.Builder()
.showStubImage(stubImage)
.showImageForEmptyUri(imageForEmptyUri)
.showImageOnFail(imageOnFail).cacheInMemory().build();
}
public static void settingInit5(int stubImage, int imageForEmptyUri,
int imageOnFail) {
displayImageOptions5 = new DisplayImageOptions.Builder()
.showStubImage(stubImage)
.showImageForEmptyUri(imageForEmptyUri)
.showImageOnFail(imageOnFail).cacheInMemory().build();
}
public static void displayImage(String url, ImageView imageView) {
imageLoader.displayImage(url, imageView, displayImageOptions);
}
public static void displayImage1(String url, ImageView imageView) {
imageLoader.displayImage(url, imageView, displayImageOptions1);
}
public static void displayImage2(String url, ImageView imageView) {
imageLoader.displayImage(url, imageView, displayImageOptions2);
}
public static void displayImage3(String url, ImageView imageView) {
imageLoader.displayImage(url, imageView, displayImageOptions3);
}
public static void displayImage4(String url, ImageView imageView) {
imageLoader.displayImage(url, imageView, displayImageOptions4);
}
public static void displayImage5(String url, ImageView imageView) {
imageLoader.displayImage(url, imageView, displayImageOptions5);
/**
* 获取默认显示配置选项
*/
public static DisplayImageOptions getDefaultOptions(){
return DisplayImageOptions.createSimple();
}
/**
* 清除缓存
*/
public static void clearCache() {
imageLoader.clearMemoryCache();
imageLoader.clearDiscCache();
}
public static ImageLoader getImageLoader(){
return imageLoader;
}
}