Android网络图片加载~~~ ImageLoader+Picasso+Fresco
来源:互联网 发布:天猫美工设计流程规范 编辑:程序博客网 时间:2024/06/05 16:30
1、Universal-Image-Loader
特点
1)支持本地图片和网络图片的多线程异步加载和缓存处理
2)个性化的配置自己项目ImageLoader
3)支持图片下载过程的监听回调
4)根据控件的大小对bitmap进行裁剪,减少占用过多的内存
5)较好的控制图片的加载过程,重新加载、暂停加载等
具体使用
A 添加库文件
build.gradle中添加
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
B 添加权限:
① 网络 ②读SD卡 ③写SD卡
C application中配置属性
ImageLoaderConfiguration
DisplayImageOptions 中推荐使用bitmapConfig(Bitmap.Config.RGB_565) 有利于加载图片时候省内存
private void initUniversalImageLoader(){
//init image loader
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.pic_loading_small)
.showImageForEmptyUri(R.drawable.pic_loading_small)
.showImageOnFail(R.drawable.pic_loading_small)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)//推荐使用这个
.displayer(new SimpleBitmapDisplayer()).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
.threadPoolSize(4)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new UsingFreqLimitedMemoryCache(1 * 1024 * 1024))
.memoryCacheSize(1 * 1024 * 1024)
.diskCacheSize(50 * 1024 * 1024)
//.diskCache(new UnlimitedDiscCache(getCacheDir(),new Md5FileNameGenerator()))//将保存的时候的URI名称用MD5 加密
.tasksProcessingOrder(QueueProcessingType.LIFO)
.diskCacheFileCount(600)
.defaultDisplayImageOptions(options)
.build();
ImageLoader.getInstance().init(config);
}
D 使用
本地文件 file:// 目录文件 drawable:// content://.../XX.jpg assets://yyy.jpg
通过网络加载的 http://....
基本使用
ImageView imageView = (ImageView) findViewById(R.id.main_iv);
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage("drawable://ic_launcher.png", imageView, new ImageLoadingListener() {
//加载开始
@Override
public void onLoadingStarted(String imageUri, View view) {
}
//加载失败
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
//加载完成
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
}
//加载取消
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
}
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_launcher)
.showImageForEmptyUri(R.drawable.ic_launcher)
.showImageOnFail(R.drawable.ic_launcher)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)//推荐使用这个
.displayer(new SimpleBitmapDisplayer()).build();
imageLoader.displayImage("图片地址",imageView,options,null);
ImageSize imageSize = new ImageSize(800, 800);
imageLoader.loadImage("图片地址", imageSize, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
//需要手动设置加载后的图片到控件上
imageView.setImageBitmap(loadedImage);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
displayImage使用的是弱引用,方便垃圾回收。推荐使用这个方法。
防止OOM
1) threadPoolSize 尽量设置在1~5之间;
2) 配置解码的方式设置为RGB_565(默认888);
3) displayImage方法推荐使用。
2、Picasso
Square公司开源的一个android图形缓存库,实现图片下载和缓存功能
特点
1)加载网络或本地图片并自动缓存处理
Picasso.with(content).load(imageUrl).into(imageView);
2) 图片转换操作,变换大小 旋转等,提供接口可以自定义动作;
3) 在adapter中回收和取消当前下载功能;
4)可以适应布局大小并减少内存占用。
使用
引用库:
compile 'com.squareup.picasso:picasso:2.5.2'
//加载本地图片
Picasso.with(this).load(R.drawable.ic_launcher).into(imageView);
//加载手机中的图片
Picasso.with(this).load(new File("/storage/0/....")).into(imageView);
Picasso.with(this).load("file://android_assets/ic_launcher.png").into(imageView);
//加载网络图片
Picasso.with(this).load("网络图片链接").into(imageView);
//裁剪大小
Picasso.with(this).load("网络图片链接").resize(dp2dx(this, 200f), dp2dx(this, 200f)).into(imageView);
private int dp2dx(Context context, float dp) {
float density = context.getResources().getDisplayMetrics().density;
return (int) (dp * density + 0.5f);
}
Picasso.with(this).load("网络图片链接")
.placeholder(R.drawable.ic_launcher)//正在加载时 展示的图片
.error(R.drawable.ic_launcher)//加载失败时候的图片
.into(imageView);
3、Fresco
由Facebook 在 2015年推出的一款开源框架。
特点
完善的内存缓存和释放机制
渐进式图片加载
动图支持
可以高度自定义的UI
可以高度自定义的图片加载过程
使用
引用库:
compile 'com.facebook.fresco:fresco:1.5.0'
布局中对属性的设置:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_iv_fresco"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
fresco:actualImageScaleType="focusCrop"//图片的缩放类型
fresco:backgroundImage="@drawable/ic_launcher"//背景图片
fresco:fadeDuration="5000"//淡入浅出的时间
fresco:failureImage="@drawable/ic_launcher"//失败时候的图片
fresco:failureImageScaleType="focusCrop"//失败图片的缩放类型
fresco:placeholderImage="@drawable/ic_launcher"//正在加载中的图片
fresco:placeholderImageScaleType="focusCrop"//正在加载时候的图片缩放类型
fresco:progressBarAutoRotateInterval="5000"//进度条的旋转周期
fresco:progressBarImage="@drawable/ic_launcher"//进度条图片
fresco:progressBarImageScaleType="center"//进度条的缩放类型
fresco:retryImage="@drawable/ic_launcher"//重新加载的图片
fresco:retryImageScaleType="focusCrop"//重新加载的图片缩放类型
fresco:roundAsCircle="true"//是否是圆形
fresco:roundBottomLeft="true"//左上右下的位置是否是圆形
fresco:roundBottomRight="true"
fresco:roundTopLeft="true"
fresco:roundTopRight="true"
fresco:roundedCornerRadius="10dp"//半径
fresco:roundingBorderColor="@color/colorAccent"//填充线条的颜色
fresco:roundingBorderPadding="10dp" />//填充的线条宽度
</RelativeLayout>
初始化
需要放在setContentView()前面
Fresco.initialize(this);
加载图片
imageView = (SimpleDraweeView) findViewById(R.id.main_iv_fresco);
//加载图片
Uri uri = Uri.parse("http://dynamic-image.yesky.com/740x-/uploadImages/2015/163/50/690V3VHW0P77.jpg");
imageView.setImageURI(uri);
//图片加载失败时候可以点击重试
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setTapToRetryEnabled(true)
.setOldController(imageView.getController())
.build();
imageView.setController(controller);
阅读全文
0 0
- Android网络图片加载~~~ ImageLoader+Picasso+Fresco
- Android图片加载框架:ImageLoader,Volley,Picasso,Glide,Fresco
- Android图片加载框架:ImageLoader,Volley,Picasso,Glide,Fresco
- 图片加载三方库ImageLoader,Fresco,Picasso,Glide
- Android图片加载与缓存开源框架总结七部曲:Glide Picasso ImageLoader Fresco ASimpleCache等
- 主流图片加载框架ImageLoader、Glide、Picasso、Fresco性能分析---图片加载速度比较
- 网络图片加载框架Universal-ImageLoader和Picasso优缺点对比
- Android ImageLoader网络加载图片
- 主流图片加载框架ImageLoader、Glide、Picasso、Fresco性能分析---内存占用比较
- 图片加载框架Glide,Picasso fresco volley imageloader Universal Image Loader的比较
- Android图片加载框架比较----Glide,Picasso,Fresco
- android图片加载框架比较----Glide,Picasso,Fresco
- Android图片加载框架比较----Glide,Picasso,Fresco
- Android万能的图片加载框架(Glide、Fresco、Picasso)
- Android图片加载框架分析之Glide、Picasso和Fresco
- Android图片加载框架比较----Glide,Picasso,Fresco
- Android图片加载框架比较----Glide,Picasso,Fresco
- Android四大图片缓存(Imageloader,Picasso,Glide,Fresco)原理、特性对比
- 落单的数—LintCode
- Redis实用技巧之多应用配置文件
- 算法第四版Algorithms 第1章 基础
- [POJ 1985][树的直径]Cow Marathon
- 布局容器container 和流式布局容器container-fluid
- Android网络图片加载~~~ ImageLoader+Picasso+Fresco
- DataGridView 鼠标双击获得行列索引
- java 集合的特点
- MySQL
- java中clone的深入理解
- OGG同步字符集从US7ASCII to ZHS16GBK故障解决
- 从某个文件中匹配出正确的ip地址
- LeetCode——665. Non-decreasing Array
- Android屏幕适配方案(百分比)