Skip to content

Instantly share code, notes, and snippets.

@wlanjie
Created August 5, 2015 13:35
Show Gist options
  • Save wlanjie/6701cea7c46a37abd2f8 to your computer and use it in GitHub Desktop.
Save wlanjie/6701cea7c46a37abd2f8 to your computer and use it in GitHub Desktop.
package com.fresco.android.config;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.common.internal.Supplier;
import com.facebook.common.util.ByteConstants;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.drawee.generic.RoundingParams;
import com.facebook.imagepipeline.cache.MemoryCacheParams;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
import com.fresco.android.R;
import java.io.File;
/**
* Created by wlanjie on 15/5/18.
* Fresco图片加载库的配置
*/
public class FrescoConfig {
/**
* 分配的可用内存
*/
private static final int MAX_HEAP_SIZE = (int) Runtime.getRuntime().maxMemory();
/**
* 默认缓存目录的名字
*/
private static final String IMAGE_PIPELINE_CACHE_DIR = "image_cache";
/**
* 使用的缓存数量
*/
private static final int MAX_MEMORY_CACHE_SIZE = MAX_HEAP_SIZE / 4;
/**
* 小图极低磁盘空间缓存的最大值(特性:可将大量的小图放到额外放在另一个磁盘空间防止大图占用磁盘空间而删除了大量的小图)
*/
private static final int MAX_SMALL_DISK_VERYLOW_CACHE_SIZE = 5 * ByteConstants.MB;
/**
* 小图低磁盘空间缓存的最大值(特性:可将大量的小图放到额外放在另一个磁盘空间防止大图占用磁盘空间而删除了大量的小图)
*/
private static final int MAX_SMALL_DISK_LOW_CACHE_SIZE = 10 * ByteConstants.MB;
/**
* 硬盘缓存的大小
*/
private final static int MAX_DISK_CHACHE_SIZE = 50 * ByteConstants.MB;
/**
* 初始化Fresco的配置
* @param context android中的上下文
* @param builder builder对象
*/
public static void initializeConfigFresco(Context context, Builder builder) {
final ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context)
.setMainDiskCacheConfig(initializeDiskCache(context, builder))
.setBitmapMemoryCacheParamsSupplier(initializeMemoryCache(builder))
.build();
Fresco.initialize(context, config);
}
/**
* 初始化Fresco中的默认图片配置
* @param context android中的上下文
* @return GenericDraweeHierarchy实例
*/
public static GenericDraweeHierarchy initializeGenericDraweeHierarchy(Context context, Builder builder) {
final Resources resources = context.getResources();
GenericDraweeHierarchyBuilder hierarchyBuilder = GenericDraweeHierarchyBuilder.newInstance(context.getResources());
return hierarchyBuilder
.setFailureImage(builder == null || builder.mFailureImage == null ? resources.getDrawable(R.drawable.default_image) : builder.mFailureImage)
.setPlaceholderImage(builder == null || builder.mPlaceholderImage == null ? resources.getDrawable(R.drawable.default_image) : builder.mPlaceholderImage)
.setRoundingParams(RoundingParams.fromCornersRadius(0f))
.build();
}
/**
* 初始化硬盘缓存的配置
* @param context 上下文
* @param builder builder实例,可以为null
* @return DiskCacheConfig 实例
*/
static DiskCacheConfig initializeDiskCache(Context context, Builder builder) {
return DiskCacheConfig.newBuilder()
.setBaseDirectoryPath(builder == null || builder.mCacheDir == null ? context.getApplicationContext().getCacheDir() : builder.mCacheDir)
.setBaseDirectoryName(builder == null || builder.mDiskCacheName == null ? IMAGE_PIPELINE_CACHE_DIR : builder.mDiskCacheName)
.setMaxCacheSize(builder == null || builder.mDiskMaxCacheSize == 0 ? MAX_DISK_CHACHE_SIZE : builder.mDiskMaxCacheSize)
.setMaxCacheSizeOnLowDiskSpace(builder == null || builder.mDiskSmallMaxDiskSize == 0 ? MAX_SMALL_DISK_LOW_CACHE_SIZE : builder.mDiskSmallMaxDiskSize)
.build();
}
/**
* 初实化Fresco的内存缓存配置
* @param builder builder实例
* @return 内存配置实例
*/
static Supplier<MemoryCacheParams> initializeMemoryCache(final Builder builder) {
return new Supplier<MemoryCacheParams>() {
@Override
public MemoryCacheParams get() {
return new MemoryCacheParams(builder == null || builder.mMemoryCacheSize == 0 ? MAX_MEMORY_CACHE_SIZE : builder.mMemoryCacheSize, Integer.MAX_VALUE, builder == null || builder.mMemoryCacheSize == 0 ? MAX_MEMORY_CACHE_SIZE : builder.mMemoryCacheSize, Integer.MAX_VALUE, Integer.MAX_VALUE);
}
};
}
/**
* 当应用退出时调用些方法,释放Fresco的资源
*/
public static void shutDownFresco() {
Fresco.shutDown();
}
public static class Builder {
private String mDiskCacheName;
private long mDiskMaxCacheSize;
private long mDiskSmallMaxDiskSize;
private File mCacheDir;
private int mMemoryCacheSize;
private Drawable mFailureImage;
private Drawable mPlaceholderImage;
public Builder setDiskCacheName(String diskCacheName) {
mDiskCacheName = diskCacheName;
return this;
}
public Builder setDiskMaxCacheSize(long diskMaxCacheSize) {
mDiskMaxCacheSize = diskMaxCacheSize;
return this;
}
public Builder setDiskSmallMaxDiskSize(long diskSmallMaxDiskSize) {
mDiskSmallMaxDiskSize = diskSmallMaxDiskSize;
return this;
}
public Builder setCacheDir(File cacheDir) {
mCacheDir = cacheDir;
return this;
}
public Builder setMemoryCacheSize(int memoryCacheSize) {
mMemoryCacheSize = memoryCacheSize;
return this;
}
public Builder setFailureImage(Drawable failureImage) {
mFailureImage = failureImage;
return this;
}
public Builder setPlaceholderImage(Drawable placeholderImage) {
mPlaceholderImage = placeholderImage;
return this;
}
public FrescoConfig build() {
return new FrescoConfig();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment