1.导入依赖
//Fresco图片加载框架
implementation 'com.facebook.fresco:fresco:1.12.1'
记得添加网络权限
2.在xml布局中写入控件
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/fresco"
android:layout_width="50dp"
android:layout_height="50dp"
fresco:roundAsCircle="true"
fresco:roundedCornerRadius="180dp"
fresco:actualImageScaleType="focusCrop"
android:layout_centerVertical="true"/>
3.新建一个App.java注册初始化Fresco
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
DiskCacheConfig config = DiskCacheConfig.newBuilder(this)
.setBaseDirectoryName("images")
.setBaseDirectoryPath(Environment.getExternalStorageDirectory())
.build();
ImagePipelineConfig build = ImagePipelineConfig.newBuilder(this)
.setMainDiskCacheConfig(config)
.build();
Fresco.initialize( this,build );//初始化 上下文&build
}
}
简单配置最大的缓存大小 --也写在app类中(oncreate的方法外 最好在上面)
private static int MAX_MEM = 30* ByteConstants.MB;
private ImagePipelineConfig getConfigureCaches(Context context) {
final MemoryCacheParams bitmapCacheParams = new MemoryCacheParams(
// 内存缓存中总图片的最大大小,以字节为单位。
MAX_MEM,
// 内存缓存中图片的最大数量。
Integer.MAX_VALUE,
// 内存缓存中准备清除但尚未被删除的总图片的最大大小,以字节为单位。
MAX_MEM,
// 内存缓存中准备清除的总图片的最大数量。
Integer.MAX_VALUE,
// 内存缓存中单个图片的最大大小。
Integer.MAX_VALUE);
Supplier<MemoryCacheParams> mSupplierMemoryCacheParams = new Supplier<MemoryCacheParams>() {
@Override
public MemoryCacheParams get() {
return bitmapCacheParams;
}
};
ImagePipelineConfig.Builder builder = ImagePipelineConfig.newBuilder(context);
builder.setBitmapMemoryCacheParamsSupplier(mSupplierMemoryCacheParams);
return builder.build();
}
private void frescoInit() {
Fresco.initialize(this, getConfigureCaches(this));
// Fresco.initialize(this);
}
记得在清单文件中注册我们的App.java类
4.查找控件
SimpleDraweeView fresco = findViewById( R.id.fresco );
5.给控件(fresco)设置路径
Uri uri = Uri.parse(http://b.hiphotos.baidu.com/image/pic/item/e78.jpg);
fresco.setImageURI( uri );
完成
下面介绍一些fresco的常用属性,通过这些属性我们可以很方便的定制一些效果
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width=“20dp” // 不支持wrap_content 如果要设置宽高比, 需要在Java代码中指定setAspectRatio(1.33f);
android:layout_height=“20dp” // 不支持wrap_content
fresco:fadeDuration=“300”
fresco:actualImageScaleType=“focusCrop” // 设置图片缩放. 通常使用focusCrop,该属性值会通过算法把人头像放在中间
fresco:placeholderImage="@color/wait_color" // 下载成功之前显示的图片
fresco:placeholderImageScaleType=“fitCenter”
fresco:failureImage="@drawable/error" // 加载失败的时候显示的图片
fresco:failureImageScaleType=“centerInside”
fresco:retryImage="@drawable/retrying" // 加载失败,提示用户点击重新加载的图片(会覆盖failureImage的图片)
fresco:retryImageScaleType=“centerCrop”
fresco:progressBarImage="@drawable/progress_bar"// 提示用户正在加载,和加载进度无关
fresco:progressBarImageScaleType=“centerInside”
fresco:progressBarAutoRotateInterval=“1000”
fresco:backgroundImage="@color/blue"
fresco:overlayImage="@drawable/watermark"
fresco:pressedStateOverlayImage="@color/red"
fresco:roundAsCircle=“false” // 是不是设置圆圈
fresco:roundedCornerRadius=“1dp” // 圆角角度,180的时候会变成圆形图片
fresco:roundTopLeft=“true”
fresco:roundTopRight=“false”
fresco:roundBottomLeft=“false”
fresco:roundBottomRight=“true”
fresco:roundWithOverlayColor="@color/corner_color"
fresco:roundingBorderWidth=“2dp”
fresco:roundingBorderColor="@color/border_color"
/>
修改图片尺寸
Uri uri = “file:///mnt/sdcard/MyApp/myfile.jpg”;
int width = 50, height = 50;
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.setResizeOptions(new ResizeOptions(width, height))
.build();
PipelineDraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(mDraweeView.getController())
.setImageRequest(request)
.build();
mSimpleDraweeView.setController(controller);
自动旋转
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.setAutoRotateEnabled(true)
.build();