fresco 的用法 笔记

首先是依赖

//注意 官方现在提供的 12.0 版本的 依赖  这个版本的 依赖  无法实现简单版 的 高斯模糊 ~ 
//用这个高版本的
implementation 'com.facebook.fresco:fresco:1.11.0'

//gif 动态图片 需要添加的 依赖
implementation 'com.facebook.fresco:animated-gif:1.10.0'

fresco 的用法 笔记_第1张图片

xmlns:fresco="http://schemas.android.com/apk/res-auto"
首先一定要在 布局中 加载这个 将 app 改成 fresco

fresco 的用法 笔记_第2张图片

然后 导入控件
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);
    }

你可能感兴趣的:(备忘)