首页 > 解决方案 > 形状的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)

标签: androidshapesandroid-shape

解决方案


推荐阅读