/* * Copyright (c) 2016. The AppCan Open Source Project. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * */ package org.zywx.wbpalmstar.base; import android.graphics.Bitmap; import android.view.View; import android.widget.ImageView; import com.ace.universalimageloader.cache.disc.impl.UnlimitedDiskCache; import com.ace.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.ace.universalimageloader.cache.memory.impl.LRULimitedMemoryCache; import com.ace.universalimageloader.core.DisplayImageOptions; import com.ace.universalimageloader.core.ImageLoader; import com.ace.universalimageloader.core.ImageLoaderConfiguration; import com.ace.universalimageloader.core.assist.FailReason; import com.ace.universalimageloader.core.assist.QueueProcessingType; import com.ace.universalimageloader.core.download.BaseImageDownloader; import com.ace.universalimageloader.core.listener.ImageLoadingListener; import com.ace.universalimageloader.core.listener.ImageLoadingProgressListener; import org.zywx.wbpalmstar.base.cache.DiskCache; import org.zywx.wbpalmstar.base.listener.ImageLoaderListener; /** * Created by ylt on 2015/4/28. */ public class ACEImageLoader { private static ACEImageLoader aceImageLoader; private ACEImageLoader() { if (BConstant.app == null) { return; } ImageLoaderConfiguration config = new ImageLoaderConfiguration .Builder(BConstant.app) .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .tasksProcessingOrder(QueueProcessingType.LIFO) .memoryCache(new LRULimitedMemoryCache(10 * 1024 * 1024)) .memoryCacheSize(10 * 1024 * 1024) .diskCache(new UnlimitedDiskCache(DiskCache.cacheFolder))//自定义缓存路径 .diskCacheFileNameGenerator(new Md5FileNameGenerator()) .diskCacheSize(200 * 1024 * 1024) .diskCacheFileCount(100) .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) .imageDownloader(new BaseImageDownloader(BConstant.app, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), // readTimeout (30 s)超时时间 .writeDebugLogs() // Remove for release app .build();//开始构建 ImageLoader.getInstance().init(config); } public synchronized static ACEImageLoader getInstance() { if (aceImageLoader == null) { aceImageLoader = new ACEImageLoader(); } return aceImageLoader; } /** * "http://site.com/image.png" // from Web * "file:///mnt/sdcard/image.png" // from SD card * "file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail) * "content://media/external/images/media/13" // from content provider * "content://media/external/video/media/13" // from content provider (video thumbnail) * "assets://image.png" // from assets * "drawable://" + R.drawable.img // from drawables (non-9patch images) * * @param imageView * @param imgUrl * @param <T> */ public <T extends ImageView> void displayImage(T imageView, String imgUrl) { displayImageWithOptions(getPrefixImageUrl(imgUrl), imageView, true); } private String getPrefixImageUrl(String imgUrl){ String realImgUrl = null; if (imgUrl.startsWith(BUtility.F_Widget_RES_SCHEMA)) { String assetFileName = BUtility.F_Widget_RES_path + imgUrl.substring(BUtility.F_Widget_RES_SCHEMA.length()); realImgUrl = "assets://" + assetFileName; } else if (imgUrl.startsWith(BUtility.F_FILE_SCHEMA)) { realImgUrl = imgUrl; } else if (imgUrl.startsWith(BUtility.F_Widget_RES_path)) { realImgUrl = "assets://" + imgUrl; } else if (imgUrl.startsWith("/")) { realImgUrl = BUtility.F_FILE_SCHEMA + imgUrl; } else { realImgUrl = imgUrl; } return realImgUrl; } public <T extends ImageView> void displayImageWithOptions(String imgUrl, T imageView, boolean cacheOnDisk) { if (cacheOnDisk) { DisplayImageOptions options; options = new DisplayImageOptions.Builder() .cacheOnDisk(true) .build(); ImageLoader.getInstance().displayImage(imgUrl, imageView, options); } else { ImageLoader.getInstance().displayImage(imgUrl, imageView); } } /** * 同步获取bitmap */ public Bitmap getBitmapSync(String url){ return ImageLoader.getInstance().loadImageSync(getPrefixImageUrl(url)); } /** * 异步获取bitmap */ public void getBitmap(String url, final ImageLoaderListener listener) { ImageLoader.getInstance().loadImage(getPrefixImageUrl(url), new ImageLoadingListener() { @Override public void onLoadingStarted(String s, View view) { } @Override public void onLoadingFailed(String s, View view, FailReason failReason) { if (listener != null) { listener.onLoaded(null); } } @Override public void onLoadingComplete(String s, View view, Bitmap bitmap) { if (listener != null) { listener.onLoaded(bitmap); } } @Override public void onLoadingCancelled(String s, View view) { listener.onLoaded(null); } }); } public <T extends ImageView> void displayImageWithOptions(String imgUrl, T imageView, DisplayImageOptions options) { ImageLoader.getInstance().displayImage(imgUrl, imageView, options); } public <T extends ImageView> void displayImageWithOptions(String imgUrl, T imageView, DisplayImageOptions options, ImageLoadingListener listener) { ImageLoader.getInstance().displayImage(imgUrl, imageView, options, listener); } public <T extends ImageView> void displayImageWithOptions(String imgUrl, T imageView, DisplayImageOptions options, ImageLoadingListener listener, ImageLoadingProgressListener progressListener) { ImageLoader.getInstance().displayImage(imgUrl, imageView, options, listener, progressListener); } }