使用约束集连接多个动画

问题描述 投票:1回答:1

我正在尝试使用多个帧/布局进行动画制作。

这是我的尝试,没有成功:

final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {

                mConstraintSet.clone(Activity.this,R.layout.include_keyframe_2);
                TransitionManager.beginDelayedTransition(mConstraintLayout);
                mConstraintSet.applyTo(mConstraintLayout);
            }
        }, 500);

        final Handler handler2 = new Handler();
        handler2.postDelayed(new Runnable() {
            @Override
            public void run() {

                mConstraintSet.clone(Activity.this,R.layout.include_keyframe_3);
                TransitionManager.beginDelayedTransition(mConstraintLayout);
                mConstraintSet.applyTo(mConstraintLayout);
            }
        }, 2000);

        final Handler handler3 = new Handler();
        handler3.postDelayed(new Runnable() {
            @Override
            public void run() {

                mConstraintSet.clone(Activity.this,R.layout.include_keyframe_4);
                TransitionManager.beginDelayedTransition(mConstraintLayout);
                mConstraintSet.applyTo(mConstraintLayout);
            }
        }, 5000);

它可以做这样的事情吗?

android android-constraintlayout
1个回答
0
投票

这种递归方式比使用处理程序更好。

//CALL THIS WHEREVER YOU WANT
animate(500, R.layout.include_keyframe_2);

private void animate(final int delay, final int keyframe){
    mConstraintSet.clone(this, keyframe);

    AutoTransition transition = new AutoTransition();
    transition.setStartDelay(delay);
    transition.addListener(new Transition.TransitionListener() {
        @Override
        public void onTransitionStart(Transition transition) { }

        @Override
        public void onTransitionEnd(Transition transition) {
            int targetKeyframe;
            switch (keyframe){
                case R.layout.include_keyframe_2:
                    animate(1500, include_keyframe_3);
                    break;
                case R.layout.include_keyframe_3:
                    animate(2500, include_keyframe_4);
                    break;
            }
        }

        @Override
        public void onTransitionCancel(Transition transition) { }

        @Override
        public void onTransitionPause(Transition transition) { }

        @Override
        public void onTransitionResume(Transition transition) { }
    });
    TransitionManager.beginDelayedTransition(mConstraintLayout, transition);

    mConstraintSet.applyTo(mConstraintLayout);
}

另一个解决方案涉及使用TransitionSet类。这取决于关键帧的xml内容。

    mConstraintSet.clone(this, R.layout.example);

    TransitionSet transition = new TransitionSet();
    transition.setOrdering(TransitionSet.ORDERING_SEQUENTIAL);
    transition
            .addTransition(fadeOut)
            .addTransition(changeBounds)
            .addTransition(fadeIn);
    TransitionManager.beginDelayedTransition(mConstraintLayout, transition);

    mConstraintSet.applyTo(mConstraintLayout);
© www.soinside.com 2019 - 2024. All rights reserved.