setTint из ShapeDrawable, содержащий пользовательский Shape? - PullRequest
1 голос
/ 20 июня 2019

Вызов setTint() для ShapeDrawable, содержащего пользовательский Shape, по-видимому, не влияет на цвет базовой фигуры.

CustomShape.kt

class CustomShape : Shape() {

    private val paint = Paint()
    private val path = Path()

    init {
        paint.isAntiAlias = true
    }

    override fun onResize(width: Float, height: Float) {
        // update path
    }

    override fun draw(canvas: Canvas, paint: Paint) {
        canvas.drawPath(path, this.paint)
    }
}

Usage

val shape = CustomShape()
val drawable = ShapeDrawable(shape)
drawable.setTint(Color.RED) // not working
someView.background = drawable

1 Ответ

1 голос
/ 20 июня 2019

Решение

Используйте объект Paint, предоставленный draw(), к которому уже применен флаг против псевдонима, и будет учитывать все методы, которые вы вызываете на ShapeDrawable.


Проблема в том, что я создавал и использовал новый объект Paint, а не тот, который был предоставлен в draw().Рациональным для этого было то, что мне нужно было включить сглаживание, и я хотел избежать этого в методе draw.

Кроме того, я изначально предоставлял объекту Paint цвет непосредственно вCustomShape прежде чем понять, что лучше / необходимо разрешить ShapeDrawable справиться с этим.

...