ImageView

scaleType

scaleType有8种枚举值,按缩放和等比分为三类:

  1. 原尺寸:MATRIX、CENTER
  2. 缩放不等比:FIT_XY
  3. 缩放等比:FIT_START、FIT_CENTER、FIT_END、CENTER_CROP、CENTER_INSIDE

ImageButton

ImageButton派生自ImageView,ImageButton又派生了一个ZoomButton,ZoomButton可以代表"放大"和"缩小"两个按钮。
ZoomButton的行为基本类似于ImageButton,只是Android默认提供了btn_minus,btn_plus两个
Drawable资源,只要为ZoomButton的android:src属性分别指定btn_minus,btn_plus,即可实现"缩
小"和"放大"按钮。
Android还提供了一个ZoomControls组件,该组件相当于于同时组合了"放大"和"缩小"两个按钮,并允许分别为两个按钮绑定不同的事件监听器备。
ImageButton还有一个子类:FloatingActionButton,它代表一个悬浮按钮。

QuickContactBadge关联联系人

QuickContactBadge继承自ImageView,因此它的本质也是图片按钮,也可以通过android:src属性指定它显示的图片。QuickContactBadge额外增加的功能是:该图片可以关联到手机中指定联系人,当用户单击该图片时系统会打开相应联系人的联系方式界面。

tintMode

android:tintMode 是 Android 中用于定义‌着色混合模式‌的属性,通常与 tint 属性配合使用,决定指定颜色如何与原图(Drawable)像素进行混合。其底层对应 Porter-Duff 混合算法。‌‌

核心属性与用法

  • 属性名‌:XML 中推荐使用 app:tintMode(兼容旧版),原生为 android:tintMode
  • 作用对象‌:主要作用于 ImageView 的 srcView 的 background/foreground 以及 TextView 的复合 drawable。
  • 默认值‌:‌src_in‌(最常用,直接替换原图颜色)。
  • 适用版本‌:API 21+ 原生支持;低版本需通过 DrawableCompat.setTintMode() 或 AppCompat 控件实现。‌‌

常见混合模式详解

假设原图为黑色图标,Tint 颜色为红色:

模式值对应代码效果描述适用场景
src_inPorterDuff.Mode.SRC_IN取原图形状,填充 Tint 颜色,透明区保持透明图标变色首选‌,完全覆盖原色
src_atopPorterDuff.Mode.SRC_ATOP在原图不透明处绘制 Tint,透明处不变保留原图部分细节叠加颜色
multiplyPorterDuff.Mode.MULTIPLY颜色相乘,整体变暗模拟阴影、深色滤镜
screenPorterDuff.Mode.SCREEN颜色滤色,整体变亮模拟高光、浅色滤镜
addPorterDuff.Mode.ADD颜色值相加,可能过曝发光效果(API 29+ 更稳定)
src_overPorterDuff.Mode.SRC_OVERTint 颜色覆盖在原图之上半透明叠加效果

XML 使用示例

xml

<!-- 将图标变为红色,使用默认的 src_in 模式 --> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_icon" app:tint="#FF0000" app:tintMode="src_in" />

代码动态设置

kotlin

// 需先 mutate() 避免影响其他引用同一资源的 View val drawable = ContextCompat.getDrawable(context, R.drawable.ic_icon)?.mutate() DrawableCompat.setTint(drawable!!, Color.RED) DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN) imageView.setImageDrawable(drawable)

注意事项

  1. Vector 图标限制‌:Vector XML 文件中‌不能‌直接写 tintMode,必须在引用该 Vector 的控件(如 ImageView)上设置。
  2. Fill Color 冲突‌:若 Vector 内部 fillColor 非纯黑/透明,可能导致着色异常,建议 Vector 资源保持单色(黑/白)。
  3. 兼容性‌:在 API < 21 设备上,直接使用 android:tintMode 无效,务必使用 app:tintMode 配合 AppCompatImageView 或代码方式。‌‌
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值