Ищете лучший способ перезагрузить AnimatorAndroid

Форум для тех, кто программирует под Android
Anonymous
Ищете лучший способ перезагрузить Animator

Сообщение Anonymous »


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

Проблема в том, что первое колебание работает, когда масштаб кнопки равен 1,0. Но у меня есть анимация масштабирования при нажатии кнопки, поэтому масштаб кнопки не всегда равен 1,0 в начале. В первый раз, когда я создаю объект, аниматор, кажется, каким-то образом адаптирует анимацию в зависимости от масштаба кнопки, но в остальных случаях она всегда начинается с 1,0, независимо от текущего масштаба кнопки.

Итак, в итоге я вычислил ход шкалы и установил «время игры», чтобы оно начиналось с текущей шкалы.

Мой вопрос: почему я не могу сбросить анимацию, чтобы она работала так, как в первый раз? Это должно быть проще, чем это, IMO.

Мой код (сокращенно, отслеживание касаний более сложный и:
частное развлечение createScaleAnimator(duration: Long, ScaleX: Float, ScaleY: Float): ObjectAnimator { вернуть ObjectAnimator.ofPropertyValuesHolder( этот, PropertyValuesHolder.ofFloat("scaleX", ScaleX), PropertyValuesHolder.ofFloat("масштабY", масштабY) ).применять { this.duration = продолжительность } } val увеличитьStep1 = createScaleAnimator(100, 0.85f, 0.85f) val увеличитьStep2 = createScaleAnimator(180, 1.05f, 1.05f) val увеличитьStep3 = createScaleAnimator(180, 0.98f, 0.98f) val увеличитьStep4 = createScaleAnimator(170, 1.01f, 1.01f) val увеличитьStep5 = createScaleAnimator(170, 1f, 1f) val увеличитьAnimator = AnimatorSet().apply { playSequentially(увеличитьШаг1, увеличитьШаг2, увеличитьШаг3, увеличитьШаг4, увеличитьШаг5) } частное развлечение BeginEnlargeAnimation() { val playTime = if (scaleX == 1.0f) 0L else (enlargeStep1.duration.toFloat() * (100 - (scaleX - 0,85) / 0,15)).toLong() увеличитьStep1.currentPlayTime = время воспроизведения /*в первый раз этот аниматор учитывает текущее значение масштаба, но при любой последующей анимации он начинается с 1,0, даже если текущая печать кнопки равна, например, 0,95. Как мне заставить это работать как в первый раз без приведенных выше строк расчета?*/ увеличитьАниматор.start() } личное развлечение BeginShrinkAnimation() { //сжимает кнопку } переопределить удовольствие onTouchEvent(event: MotionEvent): Boolean { когда (событие.действие) { MotionEvent.ACTION_DOWN -> { начатьShrinkAnimation() } MotionEvent.ACTION_UP -> { начатьEnlargeAnimation() } MotionEvent.ACTION_CANCEL -> { начатьEnlargeAnimation() } } вернуть super.onTouchEvent(событие) }

Вернуться в «Android»