帮我用Kotlin写一个自定义View,内容是一个进度条,可以通过layout文件属性设置宽高,以及进度条颜色,进度条颜色是渐变色
时间: 2023-04-10 19:02:42 浏览: 56
好的,以下是Kotlin代码:
```kotlin
class GradientProgressBar(context: Context, attrs: AttributeSet) : View(context, attrs) {
private var progress = 0f
private var progressColor = intArrayOf(Color.RED, Color.YELLOW, Color.GREEN)
init {
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.GradientProgressBar)
progressColor = typedArray.getIntArray(R.styleable.GradientProgressBar_progressColor)
typedArray.recycle()
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
val rect = RectF(0f, 0f, width.toFloat(), height.toFloat())
val paint = Paint()
val shader = LinearGradient(0f, 0f, width.toFloat(), height.toFloat(), progressColor, null, Shader.TileMode.CLAMP)
paint.shader = shader
canvas?.drawRect(rect, paint)
canvas?.drawRect(rect, paint)
}
fun setProgress(progress: Float) {
this.progress = progress
invalidate()
}
}
```
在layout文件中,你可以这样使用:
```xml
<com.example.GradientProgressBar
android:layout_width="match_parent"
android:layout_height="10dp"
app:progressColor="@array/progress_colors" />
```
其中,`@array/progress_colors` 是一个颜色数组,你可以在 `res/values/arrays.xml` 文件中定义:
```xml
<array name="progress_colors">
<item>#FF0000</item>
<item>#FFFF00</item>
<item>#00FF00</item>
</array>
```
这样就可以实现一个自定义View了,可以通过设置 `setProgress()` 方法来改变进度条的进度。