移动应用 活跃维护

CircleImageView

hdodenhof/CircleImageView

用于 Android 的圆形 ImageView

14468
Stars 标星
3076
Forks 分支
391
Watchers 关注
7
Open Issues
Java
主要语言
Apache-2.0
开源协议
1003 KB
仓库大小
2 年前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:hdodenhof/CircleImageView
git clone https://github.com/hdodenhof/CircleImageView.git
git clone git@github.com:hdodenhof/CircleImageView.git
README.md master

英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。

圆形图片视图

一个快速的圆形 ImageView,非常适合用于头像。这基于 Vince Mi 的 RoundedImageView,该组件本身基于 Romain Guy 推荐的技术。

📷 原文此处有图片,请前往 GitHub 仓库查看完整内容。

它使用 BitmapShader,并且不会:

  • 创建原始 bitmap 的副本
  • 使用 clipPath(既不使用硬件加速,也不进行抗锯齿处理)
  • 使用 setXfermode 剪切 bitmap(这意味着要在画布上绘制两次)

由于这只是一个自定义的 ImageView,而不是自定义 Drawable 或两者的组合,它可以与各种 drawable 一起使用,例如来自 Picasso 的 PicassoDrawable 或其他非标准 drawable(不过需要一些测试)。

Gradle

dependencies {
    ...
    implementation 'de.hdodenhof:circleimageview:3.1.0'
}

使用

<de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:src="@drawable/profile"
    app:civ_border_width="2dp"
    app:civ_border_color="#FF000000"/>

限制

  • ScaleType 始终为 CENTER_CROP,如果尝试更改它会出现异常。这是(当前)设计如此,因为对于头像图片来说这是完全可以的。
  • 不支持启用 adjustViewBounds,因为这需要一个不受支持的 ScaleType。
  • 如果你使用像 Picasso 或 Glide 这样的图片加载库,你需要禁用它们的淡入淡出动画以避免图片错乱。对于 Picasso 使用 noFade() 选项,对于 Glide 使用 dontAnimate()。如果你想保留淡入动画,你必须将图片获取到一个 Target 中,并在接收 Bitmap 时自己应用自定义动画。
  • 在 CircleImageView 中使用 TransitionDrawable 无法正常工作,会导致图片错乱。

常见问题解答

如何在 CircleImageView 中使用 VectorDrawable?

简短回答:你不应该这样做。在 CircleImageView 中使用 VectorDrawable 非常低效。你应该将矢量图修改为圆形,并在常规 ImageView 中使用它们。

为什么 CircleImageView 不继承 AppCompatImageView?

继承 AppCompatImageView 将需要为支持库添加运行时依赖,但没有实际好处。

如何添加绑定到圆形的选择器(例如波纹效果)?

目前没有直接支持圆形绑定选择器,但你可以按照 这些步骤 自己实现。

如何在图像和边框之间添加间隙?

添加间隙也不直接支持,但 有一种变通方法。

更新日志

  • 3.1.0
    • 将位图绘制标志与 BitmapDrawable 对齐(改善缩放)
  • 3.0.2
    • 修复在 API 级别 <= 19 初始化期间的 NPE
    • 如果禁用圆形转换,修复提供错误轮廓的问题
  • 3.0.1
    • 修复当视图为空时触摸事件未触发的问题
    • 修复即使禁用变换,触摸区域仍被限制为圆形的问题
  • 3.0.0
    • 将触摸事件处理限制在圆形区域
    • 迁移到 AndroidX
    • 移除已弃用的属性和方法
  • 2.2.0
    • 添加对高度的支持
    • 添加圆形背景颜色属性以替换填充颜色
  • 2.1.0
    • 添加对填充的支持
    • 添加禁用循环转换的选项
    • 修复在某些情况下图像与边框之间出现细线间隙的问题
    • 修复使用 tint 属性(不支持的属性)时的空指针异常
    • 弃用填充颜色,因为它似乎引起了相当多的混淆
  • 2.0.0
    • 突发新闻:自定义 XML 属性现在以 "civ_" 为前缀
    • 对不兼容的可绘制对象进行优雅处理
    • 添加对在透明区域后显示填充颜色的图像的支持
    • 修复小图像的尺寸计算问题
    • 修复将位图设置为 null 时未被清除的问题
  • 1.3.0
    • Add setBorderColorResource(int resId)
    • 添加资源类型注解
    • 添加 border_overlay 属性以允许在基础图像上绘制边框
  • 1.2.2
    • 添加颜色滤镜支持
  • 1.2.1
    • 修复 ColorDrawable 在 Lollipop 上无法正确渲染的问题
  • 1.2.0
    • 添加对 setImageURI(Uri uri) 的支持
    • 修复在使用 CircleImageView(Context context) 时视图未初始化的问题
  • 1.1.1
    • 修复边框宽度设置为0时仍显示边框的问题
  • 1.1.0
    • 添加对 ColorDrawable 的支持
    • 为边框颜色和边框宽度添加 getter 和 setter
  • 1.0.1
    • 防止因内存溢出错误导致的崩溃
  • 1.0.0
    • 初始版本

许可证

版权 2014 - 2020 Henning Dodenhof

根据 Apache 许可证 2.0 版(“许可证”)获得许可;
除非遵守许可证,否则您不得使用此文件。
您可以在以下位置获取许可证副本

    http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,根据许可分发的软件是按“原样”提供的,
不提供任何形式的明示或暗示的保证或条件。
有关许可下权限和限制的具体语言,请参阅许可协议。
本站来源与版权声明
  • 本文标题:CircleImageView - 用于 Android 的圆形 ImageView
  • 本文链接:https://www.cn121.com/mobile/hdodenhof-circleimageview.html
  • 原项目:hdodenhof/CircleImageView 版权归原作者 hdodenhof 及贡献者所有
  • 收录信息:本站于 2026-10-19 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 Apache-2.0(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。本站对原文仅作排版与图片地址适配, 并保留原项目的 NOTICE 与署名要求。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 hdodenhof/CircleImageView。
  • 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。