一个循环里面的AnimationListener? (每次等待动画完成)

时间:2014-03-17 20:45:37

标签: android animation

更新:让我的问题更清楚:我应该如何构造循环,以确保在动画结束前一次迭代之前不会发生下一次迭代?

所以我在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

1 个答案:

答案 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) {}

}

如果您需要一些帮助以便更好地理解,请询问评论:)