一 Picasso框架
待续
二 Glide框架
1.GlideModule配置参数
package com.cary.okhttp;
import android.content.Context;
import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.load.DecodeFormat;
import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;
import com.bumptech.glide.load.engine.cache.LruResourceCache;
import com.bumptech.glide.load.engine.cache.MemorySizeCalculator;
import com.bumptech.glide.module.GlideModule;
/**
* Glide参数配置
*/
public class GlideConfig implements GlideModule {
private final int diskSize = 1024 * 1024 * 100;
private final int memorySize = (int) (Runtime.getRuntime().maxMemory()) / 8; // 取1/8最大内存作为最大缓存
@Override
public void applyOptions(Context context, GlideBuilder builder) {
// 定义缓存大小和位置
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskSize)); //内存中
// 默认内存和图片池大小
MemorySizeCalculator calculator = new MemorySizeCalculator(context);
int defaultMemoryCacheSize = calculator.getMemoryCacheSize(); // 默认内存大小
int defaultBitmapPoolSize = calculator.getBitmapPoolSize(); // 默认图片池大小
builder.setMemoryCache(new LruResourceCache(defaultMemoryCacheSize)); // defaultMemoryCacheSizes默认的
builder.setBitmapPool(new LruBitmapPool(defaultBitmapPoolSize));
// 自定义内存和图片池大小
builder.setMemoryCache(new LruResourceCache(memorySize));
builder.setBitmapPool(new LruBitmapPool(memorySize));
// 定义图片格式
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
builder.setDecodeFormat(DecodeFormat.PREFER_RGB_565); // 默认
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
配置androidManifestxml
<meta-data
android:name="com.cary.okhttp.GlideConfig"
android:value="GlideModule"/>
配置proguard-rules.pro
-keepnames class * com.example.jianglei.glidedemo.GlideModelConfig
Glide允许一个应用当中存在多个GlideModules,但是Glide并不会按照一个特殊的顺序去调用已注册的GlideModules,如果一个应用的多个依赖工程当中有多个相同的Modules,就有可能会产生冲突。
如果一个冲突是不可避免的,应用应该默认去定义一个自己的Module,用来手动地处理这个冲突,在进行Manifest合并的时候,可以用下面的标签排除冲突的Module:
<meta-data android:name=”xxxxx.GlideConfig” tools:node=”remove”/>
2.GlideUtils
package com.cary.okhttp;
import android.content.Context;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
/**
* Created by xi on 2017/4/9.
*/
public class GlideUtil {
/**
* 异步网络图片加载
* @param context
* @param url
* @param imageView
*/
public static void loadNetImg(Context context, String url,ImageView imageView){
//http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg
Glide.with(context)
.load(url)
.into(imageView);
}
/**
* 异步网络图片加载并设置图片显示大小
* @param context
* @param url
* @param imageView
* @param width
* @param height
*/
public static void loadImgWithSize(Context context, String url,ImageView imageView, int width, int height){
Glide.with(context).load(url).override(width, height).into(imageView);
}
/**
* 异步网络加载图片,失败加载默认图片
* @param context
* @param url
* @param imageView
*/
public static void loadImgWithError(Context context, String url,ImageView imageView){
Glide.with(context)
.load(url)
.placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);
}
/**
* 网络图片加载动画
* @param context
* @param url
* @param imageView
* @param animId
*/
public static void loadImgWithAnimate(Context context, String url,ImageView imageView, int animId){
Glide.with(context).load(url).animate(animId).into(imageView);
}
/**
* 图片加载完成后回掉
*/
/**
* 支持缩略图,先加载缩略图 然后在加载全图
* @param context
* @param url
* @param imageView
*/
public static void loadGifWihtThumbnail(Context context, String url,ImageView imageView){
Glide.with(context).load(url).thumbnail(0.1f).into(imageView); //传了一个 0.1f 作为参数,Glide 将会显示原始图像的10%的大小。
}
/**
* 显示gif静态图
* @param context
* @param url
* @param imageView
*/
public static void loadAsBitmap(Context context, String url,ImageView imageView) {
Glide.with(context).load(url).asBitmap().into(imageView);
}
/**
* 显示gif动态图
* @param context
* @param url
* @param imageView
*/
public static void loadAsGif(Context context, String url,ImageView imageView) {
Glide.with(context).load(url).asGif().into(imageView);
}
/**
* 设置磁盘缓存
* @param context
* @param url
* @param imageView
*/
public static void loadWithDiskCache(Context context, String url,ImageView imageView){
//缓存参数
//ALL:缓存源资源和转换后的资源(即所有版本,默认行为)
//NONE:不作任何磁盘缓存。然而,默认的它将仍然使用内存缓存!
//SOURCE:仅缓存源资源(原来的全分辨率的图像)。
//在我们上面略缩图的例子中,将会只有一个1000x1000 像素的图片
//RESULT:缓存转换后的资源(最终的图像,即降低分辨率后的(或者是转换后的)
Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
}
/**
* 跳过内存缓存
* @param context
* @param url
* @param imageView
*/
public static void loadWithSkipMemoryCache(Context context, String url,ImageView imageView){
//设置跳过内存缓存
//这意味着 Glide 将不会把这张图片放到内存缓存中去
//这里需要明白的是,这只是会影响内存缓存!Glide 将会仍然利用磁盘缓存来避免重复的网络请求。
Glide.with(context)
.load(url)
.skipMemoryCache(true)
.into(imageView);
}
/**
* 设置加载优先级
* @param context
* @param url
* @param imageView
*/
public static void loadByPriority(Context context, String url,ImageView imageView){
Glide.with(context).load(url).priority(Priority.NORMAL).into(imageView);
}
/**
* 清理内存缓存 可以在UI主线程中进行
* @param context
*/
public static void clearMemoryCache(Context context){
Glide.get(context).clearMemory();
}
/*
* 绑定生命周期:如果绑定对象生命周期结束,那么等待中的加载请求会被取消
* .with(Context context)// 绑定Context
.with(Activity activity);// 绑定Activity
.with(FragmentActivity activity);// 绑定FragmentActivity
.with(Fragment fragment);// 绑定Fragment
*/
}
三 Fresco框架
待续