首先是依赖
//注意 官方现在提供的 12.0 版本的 依赖 这个版本的 依赖 无法实现简单版 的 高斯模糊 ~
//用这个高版本的
implementation 'com.facebook.fresco:fresco:1.11.0'
//gif 动态图片 需要添加的 依赖
implementation 'com.facebook.fresco:animated-gif:1.10.0'
xmlns:fresco="http://schemas.android.com/apk/res-auto"
首先一定要在 布局中 加载这个 将 app 改成 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 中属性的 用法
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” | 进度条旋转时间间隔 |
官方的XML 介绍的比较少 目前只会这些常用的属性
重点
新建一个类,继承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);
网络加载 GIF 图片
//找控件
SimpleDraweeView draweeView = findViewById(R.id.simp);
//路径
Uri uri1 =Uri.parse("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543319171087&di=4065895f620674a0e6cc607e559f47fb&imgtype=0&src=http%3A%2F%2Fimg2.a0bi.com%2Fupload%2Fttq%2F20160604%2F1465047737627.gif");
//不多解释
AbstractDraweeController build = Fresco.newDraweeControllerBuilder()
.setUri(uri1)
.setAutoPlayAnimations(true)
.build();
draweeView.setController(build);
缩放类型
类型 | 描述 |
---|---|
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);
}