• 作者:老汪软件技巧
  • 发表时间:2024-08-19 11:04
  • 浏览量:

Drawable 是 一个通用抽象类,代表了“可以绘制的东西”。通常会将 Drawable 作为从资源中检索的类型,用于在屏幕上绘制内容。Drawable 类提供了一个通用的 API 来处理可能采取多种形式的底层视觉资源。与 View 不同,Drawable 没有处理事件或与用户交互的能力。

除了简单的绘制之外,Drawable 还为客户端提供了许多通用机制来与正在绘制的内容进行交互:

1. Drawable 类简介1.1 特性1.2 常见子类

Drawable 类有许多子类,每个子类实现了特定的绘制行为。以下是一些常见的子类:

1.3 Drawable 示例

下面是一个StateListDrawable的使用示例,其用于根据不同的状态(例如按下、选中)显示不同的 Drawable:

private fun createStateListDrawable(normalColor: Int, pressedColor: Int, cornerRadius: Float): StateListDrawable {
        val stateListDrawable = StateListDrawable()
        val normalDrawable = createRoundedRectangleDrawable(normalColor, cornerRadius)
        val pressedDrawable = createRoundedRectangleDrawable(pressedColor, cornerRadius)
        stateListDrawable.addState(intArrayOf(android.R.attr.state_pressed), pressedDrawable)
        stateListDrawable.addState(intArrayOf(), normalDrawable) // Default state
        return stateListDrawable
    }
private fun createRoundedRectangleDrawable(color: Int, cornerRadius: Float): GradientDrawable {
        return GradientDrawable().apply {
            shape = GradientDrawable.RECTANGLE
            setColor(color)
            cornerRadii = floatArrayOf(
                cornerRadius, cornerRadius, // Top left radius
                cornerRadius, cornerRadius, // Top right radius
                cornerRadius, cornerRadius, // Bottom right radius
                cornerRadius, cornerRadius  // Bottom left radius
            )
        }
    }

使用它:

kotlin.runCatching {
    val normalColor = Color.parseColor("#FF6647") // 正常状态的颜色
    val pressedColor = Color.parseColor("#4DFF6647") // 按下状态的颜色
    val cornerRadius = ScreenUtil.dp2px(context, 20f).toFloat() // 圆角半径(以像素为单位)
    val buttonBackground = createStateListDrawable(normalColor, pressedColor, cornerRadius)
    btnView.background = buttonBackground
}

2、自定义Drawable

当系统提供的 Drawable 子类无法满足需求时,可以通过继承 Drawable 类来自定义绘制行为。通过自定义 Drawable,你可以完全控制如何绘制内容,例如绘制特殊的形状、图案或实现复杂的图形效果。

自定义按钮背景:通过自定义 Drawable,你可以为按钮实现复杂的背景效果,比如渐变色、阴影效果等。复杂图形绘制:例如,你想绘制一个圆形内嵌着特定图案的图形。状态响应式绘制:可以结合 StateListDrawable 实现响应式的自定义绘制行为。3. 结论

Drawable 是 Android 中强大的绘制工具,它通过抽象类的方式允许开发者对绘制内容进行深度定制。通过继承 Drawable 类,你可以根据项目的需求绘制任意形状、效果或图案。掌握 Drawable 的自定义技巧,将有助于提升应用的 UI 表现力,并实现高定制化的视觉效果。