Я создаю нечто похожее, создавая KeyboardListener, подобный этому (https://stackoverflow.com/a/25681196/11136689) после того, как вы получите разницу в высоте, вы можете анимировать элементы так, как вы хотите. Например, вы можете сделать анимацию перехода, подобную этой.
Перед тем, как что-либо анимировать с помощью TransitionManager, вам нужно сохранить исходный ConstraintSet, например, так:
ConstraintSet originalConstraintSet = new ConstraintSet();
originalConstraintSet.clone(constraintLayout); // This is the ConstraintSet from your ConstraintLayout which you build in xml.
Теперь вам нужно настроить новый ConstraintSet, выполнив это:
ConstraintSet compactConstraintSet = new ConstraintSet();
compactConstraintSet = clone(constraintLayout);
Далеевам нужно настроить положение ваших элементов в ConstraintLayout следующим образом:
compactConstraintSet.connect
(userNameTextView.getId(),ConstraintSet.TOP,
ConstraintSet.PARENT_ID, ConstraintSet.TOP,
heightdifference); // You can add margin.
После того, как вы сделали это для каждого элемента, который вы хотите переместить, вам просто нужно выполнить следующее
AutoTransition transition = new AutoTransition();
transition.setDuration(250); //The animation speed in ms
transition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
isAnimationRunning = true;
}
@Override
public void onTransitionEnd(Transition transition) {
}
@Override
public void onTransitionCancel(Transition transition) {
}
@Override
public void onTransitionPause(Transition transition) {
}
@Override
public void onTransitionResume(Transition transition) {
}
});
TransitionManager.beginDelayedTransition(constraintLayout, transition);
compactConstraintSet.applyTo(viewHolder.rootView); // here you apply the constraintSet how you want the view should look like after transition
А для анимации назад вы можете сделать то же самое с исходным набором ограничений:
TransitionManager.beginDelayedTransition(constraintLayout, transition);
originalConstraintSet.applyTo(constraintLayout);
Если вы внесли изменения в представление, такое как значение альфа, и применили его также к compactConstraintSet, тогда будет анимацияна альфа зрения.
Надеюсь, я мог бы дать вам идею, как решить эту проблему.
Happy Codiнг.