我正在尝试使用多个帧/布局进行动画制作。
这是我的尝试,没有成功:
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);
它可以做这样的事情吗?
这种递归方式比使用处理程序更好。
//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);