我刚刚开始学习动画,我正在尝试在约束布局更改动画完成后添加另一个视图。我添加了一个监听器,用于约束布局发生变化的时间,但在动画开始时触发,而不是在动画完成后触发。
rootConstraintLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
Log.d(TAG, "onLayoutChange: testing ");
}
});
Run Code Online (Sandbox Code Playgroud)
这是我用来更改布局的方法
private void changeExamplePageLayout() {
ConstraintSet constraintSetBeforeExample = new ConstraintSet();
ConstraintSet constraintSetAfterExample = new ConstraintSet();
constraintSetBeforeExample.clone(rootConstraintLayout);
constraintSetAfterExample.clone(getContext(), R.layout.example_fragment_sub_set);
TransitionManager.beginDelayedTransition(rootConstraintLayout);
constraintSetAfterExample.applyTo(rootConstraintLayout);
}
Run Code Online (Sandbox Code Playgroud)
任何指向我应该看的方向都将不胜感激。
所以我解决了这个,
而不是这里的代码=
rootConstraintLayout = view.findViewById(R.id.rootConstraintLayout);
constraintSetBeforeExample = new ConstraintSet();
constraintSetAfterExample = new ConstraintSet();
constraintSetBeforeExample.clone(rootConstraintLayout);
constraintSetAfterExample.clone(getContext(),R.layout.example_fragment_sub_set);
TransitionManager.beginDelayedTransition(rootConstraintLayout);
Run Code Online (Sandbox Code Playgroud)
如果您没有在 delayTransition 方法中提供转换管理器使用默认转换,我创建了自己的转换,您可以向其中添加侦听器。
rootConstraintLayout = view.findViewById(R.id.rootConstraintLayout);
constraintSetBeforeExample = new ConstraintSet();
constraintSetAfterExample = new ConstraintSet();
constraintSetBeforeExample.clone(rootConstraintLayout);
constraintSetAfterExample.clone(getContext(),R.layout.example_fragment_sub_set);
Transition transition = new ChangeBounds();
transition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(@NonNull Transition transition) {
}
@Override
public void onTransitionEnd(@NonNull Transition transition) {
if (layoutChanged) {
addExampleQuestionFragment();
}
}
@Override
public void onTransitionCancel(@NonNull Transition transition) {
}
@Override
public void onTransitionPause(@NonNull Transition transition) {
}
@Override
public void onTransitionResume(@NonNull Transition transition) {
}
});
Run Code Online (Sandbox Code Playgroud)
然后将您刚刚创建的过渡设置为方法中的参数
TransitionManager.beginDelayedTransition(rootConstraintLayout, transition);
Run Code Online (Sandbox Code Playgroud)
如果其他人有这个问题,希望他的帮助
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |