因此,我尝试使用此答案中描述的方法来重新创建2048:
Which LayoutManager for the animations of a 2048 game?
在完成TextView的过渡后,我需要更改其外观并删除与之合并的TextView。但是,如答案中所述,使用TransitionListener的onTransitionEnd方法无法正常工作。在所有转换完成后,它仅执行一次,即使多次调用包含转换代码的TextView方法也是如此。
Transition tileMoveTransition = new ChangeBounds();
tileMoveTransition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
}
@Override
public void onTransitionEnd(Transition transition) {
Log.d("debug", "Transition ended.");
if (doesMerge) {
removeTile(columnStop, rowStop);
changeTileType(tileToMove, newValue);
}
}
@Override
public void onTransitionCancel(Transition transition) {
}
@Override
public void onTransitionPause(Transition transition) {
}
@Override
public void onTransitionResume(Transition transition) {
}
});
tileMoveTransition.setDuration(2000); //*******************
TransitionManager.beginDelayedTransition(fieldLayout, tileMoveTransition);
constraintSet.applyTo(fieldLayout);
onTransitionEnd中的所有变量都需要声明为final,但这会导致它们具有无意义的值(例如,当newValue仅设置为2或4时,newValue将为-1),并且仍然只执行一次,因此反正只会影响其中一个TextView。
我是在做错什么,还是有更好的方法将TextView移到新位置,然后在完成后更改其外观(动画)并删除另一个TextView?