Fresco使用

2023-11-18

fresco简单使用

先上文档地址:

github:https://github.com/facebook/fresco
文档:https://frescolib.org/docs/index.html

从在github上最好点击英文文档,中文的版本比较旧。

1:导入

 implementation 'com.facebook.fresco:fresco:2.0.0'
    // 在 API < 14 上的机器支持 WebP 时,需要添加
    implementation 'com.facebook.fresco:animated-base-support:1.3.0'

    // 支持 GIF 动图,需要添加
    implementation 'com.facebook.fresco:animated-gif:2.0.0'

    // 支持 WebP (静态图+动图),需要添加
    implementation 'com.facebook.fresco:animated-webp:2.0.0'
    implementation 'com.facebook.fresco:webpsupport:2.0.0'
   // 仅支持 WebP 静态图,需要添加
   implementation 'com.facebook.fresco:webpsupport:2.0.0'

2:初始化

初始化很简单,在application中添加initialize的方法即可。

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

因为在加载图片前需要先初始化,所以放到application中只需要初始化一次就可以了。
有一点需要注意,如果你不是在application中初始化,则必须在setContentView之前初始化,否则,会出现以下错误:

  Caused by: java.lang.NullPointerException: SimpleDraweeView was not initialized!
        at com.facebook.common.internal.Preconditions.checkNotNull(Preconditions.java:226)
        at com.facebook.drawee.view.SimpleDraweeView.init(SimpleDraweeView.java:81)
        at com.facebook.drawee.view.SimpleDraweeView.<init>(SimpleDraweeView.java:63)
        at java.lang.reflect.Constructor.newInstance0(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 

3:使用

如果你只是想加载一张网络图片,那就直接使用 SimpleDraweeView 这个view。

   <com.facebook.drawee.view.SimpleDraweeView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_margin="12dp"
    android:id="@+id/iv_simple"
   />

如上述代码,这里需要注意的是:
一般情况下Drawees 是不支持wrap_content的。
只有设置固定的宽高比时,才可以使用wrap_content,而且宽高不能同时使用
wrap_content。一方必须指定match_parent或者固定宽高。

  <com.facebook.drawee.view.SimpleDraweeView
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_margin="12dp"
                fresco:viewAspectRatio="0.6"
                android:id="@+id/iv_simple"
                />

set图片就很简单了。

 Uri uri = Uri.parse("https://wxt.sinaimg.cn/mw1024/9d52c073gy1g4dr4b1q1nj20ia0odn2w.jpg");
 ivSimple.setImageURI(uri);

另外在使用fresco:viewAspectRatio="0.6"这些自定义的属性时,我最开始用的
1.3.0得jar。在studio中使用的时候,xml中一直不提示这些属性,找到drawee的源码,以及value,另外drawee是在com.facebook.fresco:animated-webp:1.3.0这个jar包中。
下面是1.3的:
在这里插入图片描述
可以看到属性里面只有两个。
再看下升级到2.0.0后。

在这里插入图片描述
在这里插入图片描述
这时value中才有了我们需要的自定义的属性,如placeholderImage等。
在这里插入图片描述

占位图
通常我们加载图片时,都是需要使用占位图。
在fresco中我们可以直接在xml里面设置下面的这两个属性:

 fresco:placeholderImage=""
 fresco:placeholderImageScaleType=""

失败占位图

fresco:failureImage="@mipmap/ic_launcher"
fresco:failureImageScaleType="centerCrop"

圆形图片

如果我们只是想将图片加载成圆形,那么使用fresco十分简单。
在xml中设置fresco:roundAsCircle="true"即可。

  <com.facebook.drawee.view.SimpleDraweeView
                android:layout_width="150dp"
                android:layout_height="150dp"
                android:layout_margin="12dp"
                fresco:roundAsCircle="true”
                android:id="@+id/iv_simple_circle"
                />

看下效果:
在这里插入图片描述
如图所示,效果是不是不错?
另外正常情况下,这种圆形图我们是不是给他加个boder是不是更好?
好吧,fresco也帮我们想到了,

<com.facebook.drawee.view.SimpleDraweeView
                android:layout_width="150dp"
                android:layout_height="150dp"
                android:layout_margin="12dp"
                fresco:roundAsCircle="true"
                fresco:roundingBorderWidth="2dp"
                fresco:roundingBorderColor="#333"
                fresco:roundingBorderPadding="5dp"
                android:id="@+id/iv_simple_circle2"
                />

如上所示,roundingBodrderWidth指定宽度,fresco:roundingBorderColor指定边框颜色, fresco:roundingBorderPadding指定边框padding的距离。
在这里插入图片描述
圆角图片

在这里插入图片描述
如图所示,我们可以单独指定某个角,也可以四个角全都指定。
另外xml中只能指定一个圆角半径,在代码中可指定四个不同的圆角半径。

 <com.facebook.drawee.view.SimpleDraweeView
                android:layout_width="150dp"
                android:layout_height="150dp"
                android:layout_margin="12dp"
                fresco:roundBottomLeft="false"
                fresco:roundTopRight="false"
                fresco:roundedCornerRadius="20dp"
                fresco:roundingBorderWidth="2dp"
                fresco:roundingBorderColor="#333"
                android:id="@+id/iv_simple_radius3"
                />

如fresco:roundBottomLeft这些属性是boolean值,false代表不要圆角。

在这里插入图片描述
到此,xml中的相关属性已经差不多结束了。

问题

1: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/util/Pools$SynchronizedPool;
解决办法有两种
1:降低版本在没有使用androidX之前,使用1.13.0
2: Migrate to androidX。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fresco使用 的相关文章

随机推荐

  • ES6中Null判断运算符(??)正确打开方式-

    读取对象属性的时候 如果某个属性的值是null或者undefined 有时候需要为它们指定默认值 常见的作法是通过 运算符指定默认值 const headerText response settings headerText Hello w
  • C语言:指针(进阶)

    目录 指针 指针概念 a 什么是地址 b 什么是指针 指针变量 a 指针变量是用来做什么的 b 指针变量的类型怎么理解 和 操作符 a 单目操作符 是什么 b 单目操作符 是什么 二级指针 a 二级指针是什么 指针类型的意义 a 为什么指针
  • iOS 报错:没有查看权限the file "xxx.app" couldn't be opened because you don't have permission to view it.

    iOS the file xxx app couldn t be opened because you don t have permission to view it 问题解决方法汇总 1 最近重构项目 增加target来区分环境进行差异
  • order by排序的用法

    一 order by 1 其实1表示第一个栏位 2表示第二栏位 依此类推 当表中只有2个栏位时 oder by 3就会出错 这个跟order by 列名没有什么区别 不过在特殊情况下还是很有用的 select owner table nam
  • windows vs2010 下使用glib库 mono4.3

    开发工具 vs2010 1 下载glib http ftp gnome org pub gnome binaries win32 glib 中有各个版本的glib列表 选一个感兴趣的 本文使用2 12 glib 2 12 11 zip gl
  • OKR与CFR管理模式(一)-什么是OKR?

    前言 无论任何管理书籍 都是围绕着人性 如何激发员工的人性中的自尊和自我价值观 自我成就感 作为一名领导者 在管理面前 必须要是冷静 安静的对待他人 好主意 再加上 卓越的执行 就一定可以创造奇迹 而这正是OKR 目标与关键结果 Objec
  • 常见面试问题 - 2(计算机网络)

    OSI七层模型 TCP IP四层模型 五层协议 OSI七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 TCP IP四层模型 应用层 传输层 网络层 网络接口层 五层体系结构 应用层 传输层 段 网络层 包 数据链路层
  • glint360k数据集的解压

    关于训练集的解压早就有人写了blog了 文章地址 https blog csdn net weixin 43408232 article details 109687884 但是对于它剩余的7个bin文件我很困惑 根据他们在官方的微博上声明
  • Verilog学习(3)initial,always,task,function,常见系统任务

    结构说明语句 Verilog中任何过程模块都属于以下四种结构的说明语句 initial说明语句 always 说明语句 task说明语句 function说明语句 一个程序模块可以有多个initial和always 过程块 每个initia
  • 常用的windows命令大全

    当我们熟练掌握windows命令时 可以通过输入命令来快速完成各种系统操作 非常的便捷 那么常用的windows命令有哪些呢 今天 小编就把命令介绍给大家 windows命令 1 gpedit msc 组策略 2 sndrec32 录音机
  • 12-JavaScript的正则表达式 DAY9 (04.20)

    1 正则表达式的定义 正则表达式是由一个字符序列形成的搜索模式 用来匹配 当在文本中搜索数据时 可以使用搜索模式来描述查询内容 其可以是一个简单的字符 或者一个更复杂的模式 2 正则表达式的创建 1 字面量 var reg1 abc g g
  • 论人工智能历史、现状与未来发展战略

    来源 学术前沿 作者 郭毅可 人工智能问世60多年来 承载着人类对自己的智慧的无限自信 在这样的自信下 人工智能发展到了今天 人们在追求机器从事尽可能多的智力劳动的路上走得很快 也很远 今天人工智能的发展 实际上标志着人类第三次认知革命 即
  • 理解cpp的重载,重写,重定义

    函数重载 overload 函数重载是指在一个类中声明多个名称相同但参数列表不同的函数 这些的参数可能个数或顺序 类型不同 但是不能靠返回类型来判断 特征是 1 相同的范围 在同一个作用域中 2 函数名字相同 3 参数不同 4 virtua
  • 死锁产生条件和解决办法

    死锁 死锁产生的四个条件 产生死锁必须同时满足以下四个条件 只要其中任一条件不成立 死锁就不会发生 互斥条件 线程要求对所分配的资源 如打印机 进行排他性控制 即在一段时间内某资源仅为一个线程所占有 此时若有其他线程请求该资源 则请求线程只
  • 城市污水管网监测系统解决方案

    一 方案概述 在经济快速发展和政府政策的推动下 以产业聚焦为核心的城市园区经济发展迅速 由于在城市园区企业 工厂在生产制造过程产生了大量的废水等其他污染物都是由污水管进行排放 一旦发生井下污水管网堵塞 会造成废水中的气体等其他有害物质的传播
  • LSTM预测大写数字的c++ 代码

    自己写的LSTM预测大写数字的c 代码 有较详细的注释 有不懂的可以交流 平台 vs2015 头文件 LstmCppH h pragma once include iostream include math h include stdlib
  • Mysql 数据库

    数据库基础 1 什么是数据库 用来存储数据 数据库可在硬盘及内存中存储数据 数据库与文件存储数据的区别 数据库本质也是通过文件来存储数据 数据库的概念就是系统的管理存储数据的文件 数据库介绍 本质就是存储数据的C S架构的socket套接字
  • 商务智能-第六章 数据挖掘

    Lecture6 Data Mining 1 数据挖掘 在数据库及数据仓库中存贮有大量的数据 它们具有规范的结构形式与可靠的来源 且数量大 保存期间长 是一种极为宝贵的数据资源 充分开发 利用这些数据资源是目前计算机界的一项重要工作 1 1
  • netty handler的执行顺序(3)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今天解决2个问题 1 handler在pipeline当中究竟是如何存储的 2 在遍历handler的过程中 会根据event的不同 调用不同的handler 这一点是如何
  • Fresco使用

    fresco简单使用 先上文档地址 github https github com facebook fresco 文档 https frescolib org docs index html 从在github上最好点击英文文档 中文的版本