Одним из способов было бы предоставить вам хорошее старое поле для выхода из цикла setter-refres:
private var _viewAlpha = 255
var viewAlpha
get() {
return _viewAlpha
}
set(value) {
_viewAlpha = value
refresh()
}
fun refresh() {
_viewAlpha = 255
invalidate()
}
Если вы хотите упростить свою логику для нескольких полей, вы можете абстрагировать эту реализацию в отдельнуюКласс и использовать обратный вызов с прямым установщиком, который будет работать без вызова refresh
.Как это:
class Field(val onSetCb: (Field) -> Unit) {
private var viewAlpha = 255
fun get() {
return viewAlpha
}
fun set(value: Int) {
setDirect(value)
onSetCb(this)
}
fun setDirect(value: Int) {
viewAlpha = value;
}
}
// Elsewhere...
fun refresh(field: Field) {
field.setDirect(255)
invalidate()
}
val f = Field(::refresh)
f.set(255)