Я хочу анимировать пользовательскую позицию просмотра с помощью пользовательского свойства, например:
class ProgressFab : ImageView {
// constructors ... etc
val path = Path()
init {
path.moveTo(0f, 0f)
path.lineTo(700f, 500f)
}
@SuppressWarnings("unused")
public fun setFubPosition(path: FloatArray) {
this.x = path[0]
this.y = path[1]
}
fun startMotion() {
val animator = ObjectAnimator.ofMultiFloat(this, "fubPosition", path)
animator.duration = 5000
animator.addUpdateListener {
//(1) this.x = (it?.animatedValue as FloatArray)[0]
//(2) this.y = (it?.animatedValue as FloatArray)[1]
invalidate()
}
animator.start()
}
}
После вызова startMotion()
аниматор запускается, но setFubPosition(path: FloatArray)
не вызывается. Если я раскомментирую (1) и (2), все работает нормально.
Это декомпилированный байт-код kotlin (все выглядит нормально):
public final void setFubPosition(@NotNull float[] path) {
Intrinsics.checkParameterIsNotNull(path, "path");
this.setX(path[0]);
this.setY(path[1]);
}
Если я пытаюсь анимировать пользовательское свойство с помощью метода ofFloat
, установщик свойств работает нормально:
val animator = ObjectAnimator.ofFloat(this, "fubPosition", 0f, 100f);
Можно ли в kotlin автоматически изменять свойство с помощью установщика свойств, используя метод ofMultiFloat
или ofMultiInt
?