我可以在constraintLayout动画完成时设置回调吗

Dav*_*ave 3 android

我刚刚开始学习动画,我正在尝试在约束布局更改动画完成后添加另一个视图。我添加了一个监听器,用于约束布局发生变化的时间,但在动画开始时触发,而不是在动画完成后触发。

        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)

任何指向我应该看的方向都将不胜感激。

Dav*_*ave 8

所以我解决了这个,

而不是这里的代码=

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)

如果其他人有这个问题,希望他的帮助