Java 暂停和恢复tic tac toe win动画

Java 暂停和恢复tic tac toe win动画,java,android,multithreading,animation,pause,Java,Android,Multithreading,Animation,Pause,我已经做了tic tac toe,并在最后添加了一个动画。。。每次鞭炮动画从下到上播放时,按钮(附加的屏幕截图)都会重叠。我想知道是否有一种简单的方法可以使用线程在按钮可见之前停止进程,以便鞭炮动画可以轻松完成 代码如下: for (int[] winningPosition : winningPositions) { if (gameState[winningPosition[0]] == gameState[winningPositio

我已经做了tic tac toe,并在最后添加了一个动画。。。每次鞭炮动画从下到上播放时,按钮(附加的屏幕截图)都会重叠。我想知道是否有一种简单的方法可以使用线程在按钮可见之前停止进程,以便鞭炮动画可以轻松完成

代码如下:

for (int[] winningPosition : winningPositions)
            {
                if (gameState[winningPosition[0]] == gameState[winningPosition[1]] && gameState[winningPosition[1]] == gameState[winningPosition[2]] && gameState[winningPosition[0]] != 2) {
                    // Someone has won!
                    gameActive = false;

                    String winner = "";

                    if (activePlayer == 0) {
                        winner = "O";
                    } else {
                        winner = "X";
                    }

                    Button playAgainButton = (Button) findViewById(R.id.playAgainButton);
                    TextView winnerTextView = (TextView) findViewById(R.id.winnerTextView);
                    winnerTextView.setText(winner + " has won!");

                    ImageView firecracker = (ImageView) findViewById(R.id.firecracker);
                    firecracker.setTranslationY(-1000);
                    firecracker.setVisibility(View.VISIBLE);
                    firecracker.animate().translationYBy(-3000).setDuration(1000);
                    firecracker.setTranslationY(4000);
                    playAgainButton.setVisibility(View.VISIBLE);
                    winnerTextView.setVisibility(View.VISIBLE);
                }
            }
再次播放按钮的Onclick方法:

public void reset(View view)
    {
        ImageView firecracker = (ImageView) findViewById(R.id.firecracker);
        firecracker.setVisibility(View.INVISIBLE);
        Button playAgainButton = (Button) findViewById(R.id.playAgainButton);
        TextView winnerTextView = (TextView) findViewById(R.id.winnerTextView);
        playAgainButton.setVisibility(View.INVISIBLE);
        winnerTextView.setVisibility(View.INVISIBLE);
}
完整代码:

import android.media.Image;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.security.spec.InvalidKeySpecException;

public class MainActivity extends AppCompatActivity {

    // 0: X, 1: O, 2: Empty

    int [] gameState = {2, 2, 2, 2, 2, 2, 2, 2, 2};
    int [][] winningPositions = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0,3,6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}};
    boolean gameActive = true;



    int activePlayer = 0;


    public void dropIn(View view)
    {
        ImageView counter = (ImageView) view;


        int tappedCounter = Integer.parseInt(counter.getTag().toString());

        if (gameState[tappedCounter] == 2 && gameActive)
        {

            gameState[tappedCounter] = activePlayer;


            counter.setTranslationY(-2000);
            counter.setImageResource(R.drawable.o);

            counter.animate().translationYBy(2000).setDuration(300);

            if (activePlayer == 0) {
                counter.setImageResource(R.drawable.x);
                activePlayer = 1;
            } else {
                counter.setImageResource(R.drawable.o);
                activePlayer = 0;
            }


            boolean emptySquare = false;
            for (int squareState : gameState) {
                if (squareState == 2) {
                    emptySquare = true;
                    break;
                }
            }
            if (!emptySquare && gameActive) {
                // Game is a draw
                gameActive = true;
                Button playAgainButton = (Button) findViewById(R.id.playAgainButton);
                TextView winnerTextView = (TextView) findViewById(R.id.winnerTextView);
                winnerTextView.setText("Game is a draw...");
                playAgainButton.setVisibility(View.VISIBLE);
                winnerTextView.setVisibility(View.VISIBLE);
            }


            for (int[] winningPosition : winningPositions)
            {
                if (gameState[winningPosition[0]] == gameState[winningPosition[1]] && gameState[winningPosition[1]] == gameState[winningPosition[2]] && gameState[winningPosition[0]] != 2) {
                    // Someone has won!
                    gameActive = false;

                    String winner = "";

                    if (activePlayer == 0) {
                        winner = "O";
                    } else {
                        winner = "X";
                    }
                    Button playAgainButton = (Button) findViewById(R.id.playAgainButton);
                    TextView winnerTextView = (TextView) findViewById(R.id.winnerTextView);
                    winnerTextView.setText(winner + " has won!");

                    ImageView firecracker = (ImageView) findViewById(R.id.firecracker);
                    firecracker.setTranslationY(-1000);
                    firecracker.setVisibility(View.VISIBLE);
                    firecracker.animate().translationYBy(-3000).setDuration(1000);
                    firecracker.setTranslationY(4000);

                    playAgainButton.setVisibility(View.VISIBLE);
                    winnerTextView.setVisibility(View.VISIBLE);
                }
            }
        }
    }


    public void reset(View view)
    {
        ImageView firecracker = (ImageView) findViewById(R.id.firecracker);
        firecracker.setVisibility(View.INVISIBLE);
        Button playAgainButton = (Button) findViewById(R.id.playAgainButton);
        TextView winnerTextView = (TextView) findViewById(R.id.winnerTextView);
        playAgainButton.setVisibility(View.INVISIBLE);
        winnerTextView.setVisibility(View.INVISIBLE);

        android.support.v7.widget.GridLayout gridLayout = (android.support.v7.widget.GridLayout) findViewById(R.id.gridLayout);

        for (int i = 0; i < gridLayout.getChildCount(); i++)
        {
            ImageView counter = (ImageView) gridLayout.getChildAt(i);
            counter.setImageDrawable(null);
        }

        for (int i = 0; i < gameState.length; i++)
        {
            gameState[i] = 2;
        }

        activePlayer = 0;

        gameActive = true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
导入android.media.Image;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.GridLayout;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.security.spec.InvalidKeySpecException;
公共类MainActivity扩展了AppCompatActivity{
//0:X,1:O,2:Empty
int[]游戏状态={2,2,2,2,2,2,2,2,2};
int[][]赢位={0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6};
布尔gameActive=true;
int activePlayer=0;
公共void dropIn(视图)
{
ImageView计数器=(ImageView)视图;
int-tappedCounter=Integer.parseInt(counter.getTag().toString());
如果(游戏状态[tappedCounter]==2&&gameActive)
{
游戏状态[tappedCounter]=活动玩家;
计数器设置转换Y(-2000);
计数器.setImageResource(R.drawable.o);
counter.animate().translationYBy(2000).setDuration(300);
如果(activePlayer==0){
计数器.setImageResource(R.drawable.x);
activePlayer=1;
}否则{
计数器.setImageResource(R.drawable.o);
activePlayer=0;
}
布尔空方=假;
for(整数平方状态:游戏状态){
if(squareState==2){
空方=真;
打破
}
}
如果(!emptySquare&&gameActive){
//这场比赛是平局
gameActive=true;
按钮playAgainButton=(按钮)findViewById(R.id.playAgainButton);
TextView winnerTextView=(TextView)findViewById(R.id.winnerTextView);
setText(“游戏是平局…”);
设置可见性(View.VISIBLE);
设置可见性(View.VISIBLE);
}
对于(int[]winningPosition:winningPositions)
{
如果(游戏状态[winningPosition[0]==gameState[winningPosition[1]]和&gameState[winningPosition[1]==gameState[winningPosition[2]]和&gameState[winningPosition[0]!=2){
//有人赢了!
gameActive=false;
字符串赢家=”;
如果(activePlayer==0){
winner=“O”;
}否则{
winner=“X”;
}
按钮playAgainButton=(按钮)findViewById(R.id.playAgainButton);
TextView winnerTextView=(TextView)findViewById(R.id.winnerTextView);
setText(winner+“has wind!”);
ImageView鞭炮=(ImageView)FindView鞭炮id(R.id.firecracker);
鞭炮。设置平移Y(-1000);
鞭炮。设置可见性(视图。可见);
鞭炮.animate().translationYBy(-3000).setDuration(1000);
鞭炮。设置转换(4000);
设置可见性(View.VISIBLE);
设置可见性(View.VISIBLE);
}
}
}
}
公共无效重置(视图)
{
ImageView鞭炮=(ImageView)FindView鞭炮id(R.id.firecracker);
鞭炮。设置可见性(视图。不可见);
按钮playAgainButton=(按钮)findViewById(R.id.playAgainButton);
TextView winnerTextView=(TextView)findViewById(R.id.winnerTextView);
playAgainButton.setVisibility(View.INVISIBLE);
winnerTextView.setVisibility(View.INVISIBLE);
android.support.v7.widget.GridLayout GridLayout=(android.support.v7.widget.GridLayout)findviewbyd(R.id.GridLayout);
对于(int i=0;i
好吧,如果我把问题读对了,我通常会使用一种方法,那就是创建一个睡眠方法。。守则如下:

static void Sleep(int ms)
{
  try {
    Thread.sleep(ms);
   }catch (InterruptedException e) {
    e.printStackTrace();
   }
 }
如果我读对了问题,我的解释是,你想暂停一小段时间,然后再继续


为了实现这一点,只需在使按钮可见之前调用Sleep({Time In millises}),当我添加此项时,在按钮可见之前和鞭炮动画之后,出于某种原因,我的最后一个标记在放下之前花费了那么多时间,然后显示动画并将按钮同时可见。。。我已经添加了我的代码。。。请告诉我在哪里加。。我想这可能是由于我的for-loop,对于breif的回复我很抱歉。这个网站可能会帮你解决问题,我会稍后再给你回复好的,我会再回复,但只会短暂一段时间。我可以在这里给你一些见解,而不仅仅是一个帮助链接。在这种情况下,同步方法是最好的选择