首页 > 解决方案 > 我可以为constraintLayout动画完成时设置回调吗

问题描述

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

        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 ");
            }
        });

这是我调用更改布局的方法

    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);

    }

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

标签: android

解决方案


所以我解决了这个问题,

而不是这里的代码=

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);

如果您没有在 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) {

        }
    });

然后将刚刚创建的转换设置为方法中的参数

TransitionManager.beginDelayedTransition(rootConstraintLayout, transition);

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


推荐阅读