应用经常需要让图片有圆角或者直接变成圆形来显得更加好看,Drawee 可以轻松支持圆角显示,并且显示圆角时,并不复制和修改Bitmap对象,那样太耗费内存。

圆角

圆角实际有2种呈现方式:

圆圈 - 设置roundAsCircle为true

圆角 - 设置roundedCornerRadius

置圆角时,支持4个角不同的半径。XML中无法配置,但可在Java代码中配置。

设置圆角

可使用以下两种方式:

默认使用一个 shader 绘制圆角,但是仅仅占位图和所要显示的图有圆角效果。失败示意图和重下载示意图无圆角效果,且这种圆角方式不支持动画。

叠加一个solid color来绘制圆角。但是背景需要固定成指定的颜色。

在XML中指定 roundWithOverlayColor, 或者通过调用setOverlayColor来完成此设定。

XML中配置

SimpleDraweeView 支持如下几种圆角配置:

1

2

3

4

5

6

7

8

...

fresco:roundedCornerRadius="5dp"

fresco:roundBottomLeft="false"

fresco:roundBottomRight="false"

fresco:roundWithOverlayColor="@color/blue"

fresco:roundingBorderWidth="1dp"

fresco:roundingBorderColor="@color/red"

代码中配置

在创建 DraweeHierarchy 时,可以给 GenericDraweeHierarchyBuilder 指定一个RoundingParams 用来绘制圆角效果。

1

2

3

4

5RoundingParams roundingParams = RoundingParams.fromCornersRadius(7f);

// alternatively use fromCornersRadii or asCircle

roundingParams.setOverlayColor(R.color.green);

genericDraweeHierarchyBuilder

.setRoundingParams(roundingParams);

你也可以在运行时,改变圆角效果

1

2

3

4RoundingParams roundingParams = RoundingParams.fromCornersRadius(5f);

roundingParams.setBorder(R.color.red, 1.0);

roundingParams.setRoundAsCircle(true);

mSimpleDraweeView.getHierarchy().setRoundingParams(roundingParams);

说明

当使用BITMAP_ONLY(默认)模式时的限制:

并非所有的图片分支部分都可以实现圆角,目前只有占位图片和实际图片可以实现圆角,我们正在努力为背景图片实现圆角功能。

只有BitmapDrawable 和 ColorDrawable类的图片可以实现圆角。我们目前不支持包括NinePatchDrawable和 ShapeDrawable在内的其他类型图片。(无论他们是在XML或是程序中声明的)

动画不能被圆角。

由于Android的BitmapShader的限制,当一个图片不能覆盖全部的View的时候,边缘部分会被重复显示,而非留白。对这种情况可以使用不同的缩放类型(比如centerCrop)来保证图片覆盖了全部的View。

OVERLAY_COLOR模式没有上述限制,但由于这个模式使用在图片上覆盖一个纯色图层的方式来模拟圆角效果,因此只有在图标背景是静止的并且与图层同色的情况下才能获得较好的效果。

Drawee 内部实现了一个CLIPPING模式。但由于有些Canvas的实现并不支持路径剪裁(Path Clipping),这个模式被禁用了且不对外开放。并且由于路径剪裁不支持反锯齿,会导致圆角的边缘呈现像素化的效果。

总之,如果生成临时bitmap的方法,所有的上述问题都可以避免。但是这个方法并不被支持因为这会导致很严重的内存问题。

综上所述,在 Android 中实现圆角效果,没有一个绝对好的方案,你必须在上述的方案中进行选择。

android fresco 圆角,圆角和圆圈相关推荐

  1. Android图片缓存框架 - Fresco实现圆角或圆形图片 (四)

    目录 1.Fresco 简介 2. Fresco 文档 3. Fresco开发步骤 4. Fresco加载图片6种方式 5. Drawees xm属性设置 6 Fresco实现圆角或圆形图片 6.1 ...

  2. RN系列之五十三解决Android上图片圆角的终级解决方案

    RN上Android画图角有问题,主要存在几种情况 1.随机性,在页面有多图的情况下,偶现有的图需要画圆角的没有画圆角,有的不需要画圆角的确画了圆角 2.画圆角的不规则性,有时候想画10px的圆角,结 ...

  3. android中图片圆角,Android中实现圆角图片的几种方法

    Android中实现圆角图片有多种姿势,不知你解锁了几种? 方法一:setXfermode法 此种方式就是再new一个相同尺寸的bitmap,然后使用paint.setXfermode(new Por ...

  4. Android 实现ListView圆角效果

     今天,简单讲讲如何实现使用  ListView显示圆角. 其实代码很多都可以解决,这是在网上搜索的一个解决的代码. 无论是网站,还是APP,人们都爱看一些新颖的视图效果.直角看多了,就想看看 ...

  5. android 微信设置圆角边框代码,Android编程实现圆角边框的方法

    本文实例讲述了Android编程实现圆角边框的方法.分享给大家供大家参考,具体如下: 设置边框圆角可以在drawable-mdpi目录里定义一个xml: android:topRightRadius= ...

  6. Android水平渐变色圆角矩形

    Android水平渐变色圆角矩形 一个Android水平渐变色圆角矩形,如图: 其实实现很简单,主要感觉颜色渐变,圆角弧度比较漂亮,故记录下来.xml代码: <?xml version=&quo ...

  7. android 设置边框圆角

    android 设置边框圆角 public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) { Bitmap output = Bitma ...

  8. 直播电商软件开发,Android CardView实现圆角效果

    直播电商软件开发,Android CardView实现圆角效果实现相关代码 使用cardCornerRadius就可以直接实现圆角效果,代码如下 <androidx.cardview.widge ...

  9. android 画空心矩形框,Android实现空心圆角矩形按钮的实例代码

    搜索热词 页面上有时会用到背景为空心圆角矩形的Button,可以通过xml绘制出来. drawrable文件夹下bg_red_hollow_rectangle.xml android:shape=&q ...

最新文章

  1. Maya阿诺德室外环境灯光照明和渲染技术学习视频教程
  2. [微信小程序]时间戳转日期
  3. 学习抖音上如何一下删除大型文件,源代码给出!
  4. 学python语言用什么软件-对于自学python的初学者来说,应该使用什么编辑工具?...
  5. CentOS 7 下使用yum安装MySQL5.7.20 最简单 图文详解
  6. Linux学习第二步(Java环境安装)
  7. vue项目使用npm run dev 编译到一半不动了
  8. keepalived实现nginx的高可用(双主模型)
  9. java获取10位随机数_Java基础:JAVA中BitSet使用详解
  10. 7种常用p2p共享协议
  11. java String类
  12. 剑指Offer之二叉树的后序遍历序列
  13. python 输出颜色的设置
  14. java实现23种设计模式之普通工厂模式和抽象工厂模式
  15. 巨额商誉,谁来买单?
  16. 微型计算机中一个字节由2位组成,一个字节由几个二进制位组成
  17. springboot项目实现站内信功能记实
  18. 一个传奇玩家的传奇故事
  19. 笔记-CTA认证需要的操作, 应用可卸载, 系统还原后应用重装--Camera模块
  20. 小米手机升级后便签内容没了如何找回

热门文章

  1. 时间显示(模拟时钟)
  2. python 爬虫 表格,python爬虫爬取网页表格数据
  3. 主机一键巡检脚本--基于python实现
  4. html—table(房屋楼层显示以及根据不同类型进行背景颜色区分)
  5. 移动应用中的第三方SDK隐私合规检测
  6. dotnet 配置 Gitlab 的 Runner 做 CI 自动构建
  7. 技术分享:国民远控向日葵如何通过BBR算法提升远控体验?
  8. response.getWriter().write()和 response.getWriter().print()的区别 以及 PrintWriter对象 和 out对象 的区别
  9. Python爬虫|豆瓣图书Top250
  10. go语言基础(四):继承、方法