- 作者:老汪软件技巧
- 发表时间: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 表现力,并实现高定制化的视觉效果。