英文原文正文为项目原始 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://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 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。