Dr.*_*ton 2 graphics android linear-gradients android-custom-view kotlin
我创建了一个Android自定义视图,使用Kotlin绘制一个Star,将来用于创建自定义RatingBar; 所以我draw()考虑了Google的这个指南,扩展了View类并覆盖了它的方法来绘制一个Star:https:
//developer.android.com/training/custom-views/custom-drawing
之后,我尝试用线性渐变填充星形路径以实现此Post后的星形填充效果: 如何使用线性渐变填充Android中的路径?
class CustomStar constructor(context: Context, attr: AttributeSet) : View(context, attr) {
private var paint: Paint = Paint(Paint.FILTER_BITMAP_FLAG)
private var path: Path = Path()
init {
paint.shader = LinearGradient(0f, 0f, 0f, height.toFloat(), Color.YELLOW, Color.WHITE, Shader.TileMode.MIRROR)
}
override fun draw(canvas: Canvas?) {
super.draw(canvas)
// draw the star.
val min = Math.min(width, height).toFloat()
// top left
path.moveTo(0f, min * 0.3819901313f)
// top right
path.lineTo(min, min * 0.3819901313f)
// bottom left
path.lineTo(min * 0.1910982479f, min)
// top tip
path.lineTo(min * 0.5f, 0f)
// bottom right
path.lineTo(min*0.8089799735f, min)
// top left
path.lineTo(0f, min * 0.3819901313f)
path.close()
canvas?.drawPath(path, paint)
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见init,绘制对象的shader属性设置为, LinearGradient(0f, 0f, 0f, height.toFloat(), Color.YELLOW, Color.WHITE, Shader.TileMode.MIRROR)因此我应该期望使用渐变填充形状.
但问题是,我只得到一个实心填充的星而不是渐变,如照片中所示:
现在的问题是,为什么我会在恒星中获得纯色而不是渐变?
感谢您的关注.
此时视图的高度未知:
init {
paint.shader = LinearGradient(0f, 0f, 0f, height.toFloat(), Color.YELLOW, Color.WHITE, Shader.TileMode.MIRROR)
}
Run Code Online (Sandbox Code Playgroud)
而是覆盖onSizeChanged并在那里创建LinearGradient:
override fun onSizeChanged(w: Int, h: Int, oldW: Int, oldH: Int) {
paint.shader = LinearGradient(0f, 0f, 0f, h.toFloat(), Color.YELLOW, Color.WHITE, Shader.TileMode.MIRROR)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |