Анимация не работает в onLongClickListener - PullRequest
1 голос
/ 15 апреля 2020

У меня есть простая анимация масштаба:

val x = PropertyValuesHolder.ofFloat(View.SCALE_X, 0f, 2f)
val y = PropertyValuesHolder.ofFloat(View.SCALE_Y, 0f, 2f)
val grow = ObjectAnimator.ofPropertyValuesHolder(imageViews[j].starViews[3], x, y).apply {
    duration = 5000
}

imageView[].visibility = View.VISIBLE
AnimatorSet().play(grow)

Она хорошо работает, когда я добавляю ее в свой onTouchListener. Но когда я добавляю его в onLongClickListener, он не работает. Это только становится видимым, и анимация не происходит

imageViews[j].starViews[2].setOnLongClickListener {
    if (!imageViews[j].done && imageViews[j].intermediate) {
        //The onTouchListener also has this if condition
        val x = PropertyValuesHolder.ofFloat(View.SCALE_X, 0f, 2f)
        val y = PropertyValuesHolder.ofFloat(View.SCALE_Y, 0f, 2f)
        val grow = ObjectAnimator.ofPropertyValuesHolder(imageView, x, y).apply {
        duration = 5000
        }

   imageView.visibility = View.VISIBLE
    AnimatorSet().apply {
        Log.d("animCall", "called")
        play(grow)
    }
    return@setOnLongClickListener true
   }
   return@setOnLongClickListener false
  }

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Я только что узнал, что забыл start() внутри AnimatorSet()

0 голосов
/ 15 апреля 2020

Вы захотите создать минимальный воспроизводимый пример . Вот пример этого:

val x = PropertyValuesHolder.ofFloat(View.SCALE_X, 0f, 2f)
val y = PropertyValuesHolder.ofFloat(View.SCALE_Y, 0f, 2f)
val grow = ObjectAnimator.ofPropertyValuesHolder(imageview, x, y).apply {
    duration = 5000
}
imageview.setOnClickListener{
    grow.start()
}


imageview.setOnLongClickListener{
    grow.start()
    return@setOnLongClickListener true
}

Обычно AnimatorSet предназначен для одновременного запуска нескольких анимаций, для анимации в одном масштабе достаточно просто вызвать .start () для scaleMid2.

И OnClick, и OnLongClick создали одну и ту же анимацию, что заставляет меня поверить, что ваша проблема либо в

  • в операторе if
  • .isFocusableInTouchMode = true line
  • что-то еще в коде, не представленном в вашем вопросе

Поскольку у меня есть минимальный воспроизводимый минимальный код, я могу изменить код на этот

imageview.setOnLongClickListener{
    imageview.isFocusableInTouchMode = true
    grow.start()
    return@setOnLongClickListener true
}

и обнаружить, что OnLongClickListener по-прежнему работает нормально (демонстрируя, по крайней мере, в моем случае, что isFocusableInTouchMode не нужен).

Тогда я могу только предполагать, что проблема в вашем операторе if или в другом коде, вы можете выполнить предыдущие шаги, чтобы выяснить это. по своему усмотрению.

...