android - 形状的Android自定义属性
问题描述
有没有办法在 Android 中为形状指定自定义属性?下面是生成圆角矩形的代码示例,圆角半径设置为11dp。然后我们可以使用android:background属性将它附加到 ImageView 上。我想要的是将角半径指定为设备宽度的百分比,例如将半径值设置为“0.5dw”(这意味着当前设备宽度的 50%)。
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ff0000"/>
<corners android:radius="11dp"/>
</shape>
我知道我们可以创建一个自定义类来定义一个可绘制对象,然后使用它来创建一个圆角矩形,如下面的代码所示。但是有没有更好的方法呢?
class RoundedRectangle(var color: Int, var cornerRadius: Float) : Drawable() {
private val rectPaint = Paint().apply {
isAntiAlias = true
this.color = this@RoundedRectangle.color
}
private val drawableBounds = RectF()
override fun draw(canvas: Canvas) {
val bounds = RectF(bounds)
drawableBounds.set(bounds.left, bounds.top, bounds.right, bounds.bottom)
canvas.drawRoundRect(drawableBounds, cornerRadius, cornerRadius, rectPaint)
}
override fun setAlpha(alpha: Int) {
rectPaint.alpha = alpha
}
override fun setColorFilter(colorFilter: ColorFilter?) {
rectPaint.colorFilter = colorFilter
}
override fun getOpacity(): Int {
return PixelFormat.TRANSLUCENT
}
}
然后我们可以通过调用来设置 ImageView 的背景
val cornerRadius = 0.05f * (activity.resources.displayMetrics.widthPixels) //5%
myImageView.background = RoundedRectangle(Color.RED, cornerRadius)
解决方案
推荐阅读
- powerbi - 使用 CALCULATE 和 FILTER 测量 PBI
- javascript - Node 的 bcrypt 和 bcryptjs 库有何不同?
- c - 生成具有固定范围的随机日期
- angular - 在 clr-wizard 中更新 clr-datagrid 的 ViewChild
- reactjs - React with TypeScript - 如何导入方法
- php - 未捕获的 Twig_Error_Loader:找不到模板“pb/.twig”
- c# - 如何检查字符串是否包含 EpiFind 中的值?
- windows - % Processor Time 的单位是什么,它表示什么?
- command - 由命令触发的 Minecraft 事件处理程序
- mongodb - 使用空手道自动测试 MongoDB 的正确方法