Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 循环中的AnimationListener?(每次等待动画完成)_Android_Animation - Fatal编程技术网

Android 循环中的AnimationListener?(每次等待动画完成)

Android 循环中的AnimationListener?(每次等待动画完成),android,animation,Android,Animation,更新:让我的问题更清楚:我应该如何构造循环,以确保在上一次迭代的动画结束之前不会发生下一次迭代 所以我对在安卓系统中使用动画非常陌生。我有一个简单的动画,每次使用placeTile方法放置一个tile时都会运行 代码如下所示: public void setUpPlayers(){ //Toast for setting turn order smallToast(getResources().getString(R.string.deciding_turn_order));

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

所以我对在安卓系统中使用动画非常陌生。我有一个简单的动画,每次使用
placeTile
方法放置一个tile时都会运行

代码如下所示:

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
    }
}
public void setUpPlayers(){
//设置轮次的吐司
smallToast(getResources().getString(R.string.Demining_turn_order));
for(int i=0;i
我遇到的问题是,我希望循环不会执行下一次迭代,直到先前放置的平铺的动画完成。我该怎么做?我知道通常您必须设置AnimationLister并等待动画完成,但我不确定如何执行该操作,因为A)动画是正在放置的平铺的一部分,并且具有私有范围,B)循环希望立即执行。如何使用侦听器“保持”循环

我想到的一个想法是将
setUpPlayers()
方法重新构造为递归算法,每次迭代都调用动画,但该方法的重复在AnimationListener内部调用。不过,递归算法似乎有点过头了。有什么想法吗?实现这一目标的最佳、最简单的方法是什么

提前感谢,


JRad坏的

在我的项目中,我有一个类似的情况,我还将我的min sdk设置为8,因此我使用这个库来拥有与最新更新(Animator类)相同的功能

图书馆-

我的代码:

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

}

如果您需要一些帮助来更好地理解,只需在评论中提问:)

您对min sdk的要求是什么?我熟悉NineoAndRoid,但这不是我的问题。如有必要,我可以设置自定义事件处理。我的问题是,由于动画位于循环内部,因此无法设置动画事件处理程序并使循环暂停。不管在循环内部设置了什么事件处理,循环都会继续重复。我的问题是:我应该如何构造循环,以确保下一次迭代不会发生,直到上一次迭代的动画结束。@JRadtheBad仅调用结束动画的开始并不能做到这一点?如果将动画侦听器设置为在动画结束时开始序列,则可以使用布尔值或某些逻辑来不调用开始。。。对不起,如果我不理解你的问题,问题是很多其他事情都发生在这个循环中。我实例化玩家,设置初始资金,并决定名字。我不能/不应该将所有这些都放在事件侦听器中。我必须进行的最终和静态调整的数量似乎很荒谬。这不仅仅是让一个动画背靠背地发生,而是在上一个动画完成之前不启动下一个动画或设置下一个播放器。for循环希望执行到底,并且不会通过设置侦听器而停止。它会不断重复。也许你已经解决了这个问题,而我只是不理解答案/