ObjectAnimator с пользовательским свойством не вызывает установщик свойства - PullRequest
0 голосов
/ 30 июня 2018

Я хочу анимировать пользовательскую позицию просмотра с помощью пользовательского свойства, например:

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?

1 Ответ

0 голосов
/ 30 июня 2018

Из документации ObjectAnimator.ofMultiFloat() вы получите

В этом варианте координаты являются координатами с плавающей запятой x и y, используемыми в первом и втором параметре установщика, соответственно.

Таким образом, массив не поддерживается как параметр для свойства, но несколько параметров. Просто измените подпись установщика, чтобы отразить это требование:

@SuppressWarnings("unused")
public fun setFubPosition(x: Float, y: Float) {
    this.x = x
    this.y = y
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...