形状的 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,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)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...