Imangeloader相关配置,原理,使用以及定制相关优秀博客推荐
http://blog.csdn.net/vipzjyno1/article/details/23206387
http://www.open-open.com/lib/view/open1433940304473.html
http://www.bubuko.com/infodetail-393997.html
http://www.it165.net/pro/html/201405/14500.html
相关方法调用
Uri uri= Uri.parse(string);//将Stirng 类型的网址转换为Uri
ImageLoader的工作原理是这样的:
在显示图片的时候,它会先在内存中查找;
如果没有,就去本地查找;
如果还没有,就开一个新的线程去下载这张图片,下载成功会把图片同时缓存到内存和本地。
主体有三个,分别是UI控件,缓存模块和数据源(网络)。它们之间的关系如下:
① UI:请求数据,使用唯一的Key值索引Memory Cache中的Bitmap。
② 内存缓存:缓存搜索,如果能找到Key值对应的Bitmap,则返回数据。否则执行第三步。
③ 硬盘存储:使用唯一Key值对应的文件名,检索SDCard上的文件。
④ 如果有对应文件,使用BitmapFactory.decode*方法,解码Bitmap并返回数据,同时将数据写入缓存。如果没有对应文件,执行第五步。
⑤ 下载图片:启动异步线程,从数据源下载数据(Web)。
⑥ 若下载成功,将数据同时写入硬盘和缓存,并将Bitmap显示在UI中。
ImageLoader 的应用
1在APP build.gradle 里的dependencies 里 配置
compile'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
2在清单文件中声明权限
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3创建一个 imageUtil类,在里边复制一下代码,initConfigdefult(); 默认 initConfig() 自定义的
public class ImageUtil {
/**
* 默认ImageLoaderConfiguration
*/
public static void initConfigdefult(Context context) {
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.build();
ImageLoader.getInstance().init(config);
}
/**
* 自定义ImageLoaderConfiguration
*/
public static void initConfig(Context context) {
File cacheDir = StorageUtils.getCacheDirectory(context);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
// .memoryCacheExtraOptions(480, 800) // default = device screen dimensions
.diskCacheExtraOptions(480, 800, null)
.threadPriority(Thread.NORM_PRIORITY - 2)// default
.tasksProcessingOrder(QueueProcessingType.FIFO)// default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13)// default
.diskCache(new UnlimitedDiskCache(cacheDir))// default
.diskCacheSize(50 * 1024 * 1024)
.diskCacheFileCount(100)
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())// default
.imageDownloader(new BaseImageDownloader(context))// default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())// default
.writeDebugLogs()
.build();
ImageLoader.getInstance().init(config);
}
public static DisplayImageOptions initOptions() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
//图片在网络加载时显示的默认图片
.showImageOnLoading(R.drawable.hy)// resource or drawable
//图片请求地址为空时显示的默认图片
.showImageForEmptyUri(R.drawable.ms)// resource or drawable
//图片加载失败时显示的默认图片
.showImageOnFail(R.drawable.me)// resource or drawable
.resetViewBeforeLoading(false)// default
.delayBeforeLoading(1000)
.cacheInMemory(false)// default
.cacheOnDisk(false)// default
.considerExifParams(false)// default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
// default
.bitmapConfig(Bitmap.Config.ARGB_8888)// default
.displayer(new SimpleBitmapDisplayer())// default
.handler(new Handler())// default
.build();
return options;
}
public static void setImg(String uri, ImageView imageView) {
ImageLoader.getInstance().displayImage(uri, imageView);
}
public static void setImgwithOptions(String uri, ImageView imageView) {
ImageLoader.getInstance().displayImage(uri, imageView, initOptions());
//参数一层层向外看一只找到初始化位置
}
}
接下来我们来看看Application类的
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//以下只可以选择一个、第一个为系统默认,第二个 是自己定义的
//ImageUtil.initConfig(getApplicationContext());
ImageUtil.initConfigdefult(getApplicationContext());
}
}
然后就是MainActivity中调用
public class MainActivity extends AppCompatActivity {
ImageView imageView;
String uri="https://img3.doubanio.com/view/photo/photo/public/p2358629514.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView= (ImageView) findViewById(R.id.image);
ImageUtil.setImgwithOptions(uri,imageView);//1 为图片的地址,2 是控件 必须要初始化
}
}
下次目标准备上手Glide
http://blog.csdn.net/qq_19711823/article/details/51243918
就这样吧