Мне нужно анимировать макет снизу вверх, когда пользователь нажимает на EditText внутри этого макета.Вот мой код для этого:
myEditText.setOnFocusChangeListener() { _, focused ->
if (focused) {
val animation = object: Animation() {
override fun applyTransformation(interpolatedTime: Float, t: Transformation?) {
val params = myLayout.getLayoutParams() as RelativeLayout.LayoutParams
params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE)
myLayout.setLayoutParams(params)
}
}
animation.duration = 1000
myEditText.startAnimation(animation)
}
}
Когда я нажимаю на EditText, «myLayout» правильно переходит в верхнюю часть экрана.Тем не менее, две проблемы:
1) Нет анимации, она просто прыгает наверх.Я хочу, чтобы он «скользил» вверх.
2) Что еще более важно, представления, которые установлены как «ниже» и относительно myLayout, не идут вверх с этим.Я знаю, что они установлены правильно, так как, когда я добавляю верхнее выравнивание в XML, они подходят к нему.Но программно кажется, что они остаются внизу экрана, все еще скрыты.
Я попробовал другой подход, используя ObjectAnimator, вручную перемещая все виды вверх:
val anims = AnimatorSet();
val anim1 = ObjectAnimator.ofFloat(myLayout, View.TRANSLATION_Y, -1000f)
val anim2 = ObjectAnimator.ofFloat(layoutBelow, View.TRANSLATION_Y, -1000f)
val anim3 = ObjectAnimator.ofFloat(layoutBelowBelow, View.TRANSLATION_Y, -1000f)
anims.playTogether(anim1, anim2, anim3)
anims.start()
Выполнение, которое заставляет анимацию работать, но представления ниже "myLayout" по-прежнему невидимы!Мне любопытно, имеет ли значение, что они изначально за кадром (?)
Мысли о том, чего мне не хватает?Если есть лучший способ справиться с этим, я также открыт для разных подходов.