如何通过代码为ShapeableImageView设置ShapeAppearanceOverlay属性
ShapeableImageView动态设置shapeAppearanceOverlay解决方案
方法1:使用预定义的style资源(对应XML中直接引用@style的写法)
你可以通过ShapeAppearanceModel加载已定义的style,再赋值给控件即可,和XML中app:shapeAppearanceOverlay="@style/roundedImageView"效果完全一致:
Kotlin代码示例
val shapeAppearanceModel = ShapeAppearanceModel.builder( context, 0, R.style.roundedImageView ).build() shapeableImageView.shapeAppearanceModel = shapeAppearanceModel
Java代码示例
ShapeAppearanceModel shapeAppearanceModel = ShapeAppearanceModel.builder( context, 0, R.style.roundedImageView ).build(); shapeableImageView.setShapeAppearanceModel(shapeAppearanceModel);
方法2:完全动态自定义样式(无需预定义style)
如果不需要提前在style.xml中定义样式,也可以直接在代码里配置圆角/切角参数:
Kotlin代码示例
// 圆角数值单位为px,也可以从dimen资源读取适配多设备 val cornerRadius = 16f * resources.displayMetrics.density val shapeAppearanceModel = ShapeAppearanceModel() .toBuilder() // 所有角设置圆角 .setAllCornerSizes(cornerRadius) // 单独设置某一个角的样式示例:左上角设圆角、右上角设切角 // .setTopLeftCorner(CornerFamily.ROUNDED, cornerRadius) // .setTopRightCorner(CornerFamily.CUT, cornerRadius) .build() shapeableImageView.shapeAppearanceModel = shapeAppearanceModel
Java代码示例
float cornerRadius = 16f * getResources().getDisplayMetrics().density; ShapeAppearanceModel shapeAppearanceModel = new ShapeAppearanceModel() .toBuilder() .setAllCornerSizes(cornerRadius) // 单独设置单角样式示例 // .setTopLeftCorner(CornerFamily.ROUNDED, cornerRadius) // .setTopRightCorner(CornerFamily.CUT, cornerRadius) .build(); shapeableImageView.setShapeAppearanceModel(shapeAppearanceModel);
注意事项
- 需保证使用的Material Components依赖版本不低于1.2.0,避免API不兼容问题
- 若需要裁剪背景而非仅裁剪前景内容,需额外调用
shapeableImageView.setClipToOutline(true) - 单独设置单角样式时可选择
CornerFamily.ROUNDED(圆角)或CornerFamily.CUT(切角)
内容的提问来源于stack exchange,提问作者JavaForAndroid
相关产品推荐
相关产品推荐

