更新:让我的问题更清楚:我应该如何构造循环,以确保在动画结束前一次迭代之前不会发生下一次迭代?
所以我在Android中使用动画很新手。每次使用placeTile
方法放置图块时,我都会运行简单的动画。
代码如下所示:
public void setUpPlayers(){
//Toast for setting turn order
smallToast(getResources().getString(R.string.deciding_turn_order));
for (int i = 0; i < players.length; i++) {
if(i == 0){
players[i] = new Player("HUMAN", 6000);
players[i].setType(Player.Type.HUMAN);
} else {
players[i] = new Player(playerNames[i], 6000);
players[i].setType(Player.Type.COMPUTER);
}
players[i].drawTile(1);
TextView nameText = (TextView) findViewById(R.id.current_player_text);
nameText.setText(players[i].getName());
//find the ID for the tile just placed
String tileID = players[i].findTileIdByIndex(0);
placeTile(tileID, i); //Tile ID being placed, and the index of the player placing it
}
}
我遇到的问题是,我希望循环不执行下一次迭代,直到完成前一个瓷砖放置的动画。我怎样才能做到这一点?我知道通常你必须设置一个AnimationLister并等待动画完成但是我不知道如何去做,因为A)动画是Tile的一部分,并且有一个私有范围,B)循环想要立即执行。如何使用监听器“保持”循环?
我想到的一个想法是将setUpPlayers()
方法重新构造为递归算法,每次迭代都调用动画,但是在AnimationListener内部调用方法的重复。尽管如此,递归算法似乎有些过分。有什么想法吗?实现这一目标的最佳,最简单的方法是什么?
提前致谢,
JRad the Bad
答案 0 :(得分:0)
在我的项目中我有类似的情况,我也将我的min sdk设置为8,所以我使用这个库具有我们在最新更新(Animator类)上的相同功能
图书馆 - http://nineoldandroids.com/
我的代码:
private class MyAnimationListener implements Animator.AnimatorListener{
ObjectAnimator spinningAnimation;
@Override
public void onAnimationStart(Animator animation) {
spinningAnimation = ObjectAnimator.ofFloat(playerSpinner, "rotationY", degrees); //In my case I just flip a coin
spinningAnimation.setDuration(25);
spinningAnimation.addListener(new MyAnimationListener());
}
@Override
public void onAnimationEnd(Animator animation) {
if(repeatCount>0){
spinningAnimation.setTarget(playerSpinner);
spinningAnimation.start();
}
}
@Override
public void onAnimationCancel(Animator animation) {}
@Override
public void onAnimationRepeat(Animator animation) {}
}
如果您需要一些帮助以便更好地理解,请询问评论:)