Android Fresco讲解

本文介绍了如何在Android项目中使用Fresco库进行图片加载。从添加依赖、修改根布局到导入SimpleDraweeView控件,详细讲解了Fresco的使用步骤。还提到了XML属性设置、网络权限配置、图片加载类型选择以及代码示例,包括高斯模糊和缩放类型的设定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先先添加依赖:

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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值