首先先添加依赖:
implementation 'com.facebook.fresco:fresco:1.13.0'
然后把根布局的xmlns:fresco=“http://schemas.android.com/apk/res-auto”,改为fresco.
然后 导入控件
com.facebook.drawee.view.SimpleDraweeView
不要导错了包哦 另外 宽和高 的 属性 不可以写 自适应
<com.facebook.drawee.view.SimpleDraweeView
android:layout_marginLeft="20dp"
android:layout_gravity="center"
android:id="@+id/simp"
android:layout_width="350dp"
android:layout_height="350dp">
</com.facebook.drawee.view.SimpleDraweeView>
XML属性
用法,作用:
fresco:roundedCornerRadius="10dp"
设置圆角的圆滑度,单位可以是dp一类的 圆形是这个 属性会被忽略
fresco:roundingBorderWidth="10dp"
设置图片的外边框宽度
fresco:roundingBorderColor="#f00"
设置外边框的颜色
fresco:roundTopLeft="false"
是否允许你的图片的左上角为圆角?
fresco:roundTopRight="false"
是否允许你的图片的右上角为圆角?
fresco:roundBottomLeft="false"
是否允许你的图片的左下角为圆角?
fresco:roundBottomRight="false"
是否允许你的图片的右下角为圆角?
fresco:roundAsCircle="true"
你的图片是否以圆形,圆形,圆形!不是圆角! 的形式出现
fresco:fadeDuration="5000"
图片以 淡出 的形式出现 单位是 毫秒 (1000 是1秒)
fresco:roundWithOverlayColor="#1eaeda"
设置图片的背景颜色 如果图片没有被 圆形或者是圆角化的 话 基本是看不到的
fresco:overlayImage ="@mipmap/ic_launcher"
设置叠加图 大小没办法控制 需要在图片源 做改变 并且! 这个图是在你的图片之上
fresco:backgroundImage ="@mipmap/ic_launcher"
设置背景图 图片过小也会看不到 这张图置于你要显示的图片之下在背景色之上
fresco:placeholderImage="@mipmap/ic_launcher"
占位图片,通常是一个小图 在你的图片下方,如果图片被加载了就看不到了(被遮住)
fresco:failureImage="@mipmap/ic_launcher"
设置当网络等意外造成图片没有记载出来的时候 显示的图片
fresco:actualImageScaleType="focusCrop"
等同于android:scaleType
fresco:placeholderImage="@color/wait_color"
加载中…时显示的图
fresco:placeholderImageScaleType="fitCenter"
加载中…显示图的缩放模式
fresco:failureImageScaleType="centerInside"
加载失败时显示图的缩放模式
fresco:retryImage="@drawable/retrying"
重试时显示图
fresco:retryImageScaleType="centerCrop"
重试时显示图的缩放模式
fresco:progressBarImage="@drawable/progress_bar"
进度条显示图
fresco:progressBarImageScaleType="centerInside"
进度条时显示图的缩放模式
fresco:progressBarAutoRotateInterval="1000"
进度条旋转时间间隔
新建一个类,继承Appliction 需要在 Appliction中去声明 在清单文件中 要声明 千万不要忘记 给 网络权限
//设置缓存路径,磁盘缓存
DiskCacheConfig build = DiskCacheConfig.newBuilder(this)
.setBaseDirectoryName("image")
.setBaseDirectoryPath(Environment.getExternalStorageDirectory())
.build();
//生成配置文件
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
.setMainDiskCacheConfig(build)
.build();
Fresco.initialize(this,config);
网络加载
图片加载类型
代码写法:
网络加载
Uri.parse( 网络路径 )
本地加载
Uri.parse( "file://" +文件夹+"/"+... )
res加载
Uri.parse( "res://包名(任何字符串或者留空)/" + R.drawable.ic_launcher )
加载一张图片:
//在网络 找一个 图片的 地址~
Uri uri =Uri.parse("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543313023590&di=bb9e255302ef13884e5f6db603e5329a&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F8%2F5121d1be65259.jpg");
//通过这个找到控件
SimpleDraweeView draweeView = findViewById(R.id.simp);
//将资源赋给 控件
draweeView.setImageURI(uri);
高斯模糊:
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
//参数1:重度
//参数2:半径
.setPostprocessor(new IterativeBoxBlurPostProcessor(40, 40))
.build();
AbstractDraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(draweeView.getController())
.setImageRequest(request)
.build();
draweeView.setController(controller);
缩放类型:
center
居中,无缩放
centerCrop
保持宽高比缩小或放大,使得两边都大于或等于显示边界,且宽或高契合显示边界。居中显示
focusCrop
同centerCrop, 但居中点不是中点,而是指定的某个点
centerInside
缩放图片使两边都在显示边界内,居中显示。和 fitCenter 不同,不会对图片进行放大。如果图尺寸大于显示边界,则保持长宽比缩小图片
fitCenter
保持宽高比,缩小或者放大,使得图片完全显示在显示边界内,且宽或高契合显示边界。居中显示
fitStart
同上。但不居中,和显示边界左上对齐
fitEnd
同fitCenter, 但不居中,和显示边界右下对齐
fitXY
不保存宽高比,填充满显示边界
none
如要使用tile mode显示, 需要设置为none
工具类:还未亲测
private Uri uri ;
private SimpleDraweeView simpleDraweeView ;
private Activity activity;
public FrescoUtil(Activity activity) {
this.activity = activity;
}
//添加路径
public FrescoUtil setUri(String url){
this.uri = Uri.parse((String) url);
return this;
}
//添加控件
public FrescoUtil setView(Object o){
if(o instanceof Integer){
this.simpleDraweeView = activity.findViewById((Integer) o);
}else if(o instanceof View){
this.simpleDraweeView = (SimpleDraweeView) o;
}
return this;
}
//设置静态图
public FrescoUtil showStaticMap(){
simpleDraweeView.setImageURI(uri);
return this;
}
//设置 加载GIF 图 并且 设置 是否 可以动
public void showGifMap(boolean isAnima){
AbstractDraweeController build = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setAutoPlayAnimations(isAnima)
.build();
simpleDraweeView.setController(build);
}
//设置高斯模糊
public FrescoUtil setGaussianblur(int iterations , int blurRadius ){
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
//参数1:重度
//参数2:半径
.setPostprocessor(new IterativeBoxBlurPostProcessor(iterations, blurRadius))
.build();
AbstractDraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(simpleDraweeView.getController())
.setImageRequest(request)
.build();
simpleDraweeView.setController(controller);
return this;
}
//设置圆形图片
public void setRound(){
GenericDraweeHierarchy build = GenericDraweeHierarchyBuilder.newInstance(activity.getResources())
.setRoundingParams(RoundingParams.asCircle())
.build();
simpleDraweeView.setHierarchy(build);
}
//设置 圆角
public void setRounded(int Round){
GenericDraweeHierarchy build1 = GenericDraweeHierarchyBuilder
.newInstance(activity.getResources())
.setRoundingParams(RoundingParams.fromCornersRadius(Round))
.build();
simpleDraweeView.setHierarchy(build1);
}