2017-03-15 35 views
1

我在android編程中很新穎,我正在嘗試做一個簡單的遊戲。我想要有3個方格,並且在開始按鈕上我想生成一些隨機數並旋轉其中一個正方形。我在循環中這樣做,因爲我的隨機數的數量不固定。android studio中的循序動畫,循環

package com.example.smartpc.memorygame; 

import android.graphics.drawable.TransitionDrawable; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.AnimationSet; 
import android.view.animation.RotateAnimation; 
import android.widget.Button; 
import android.widget.ImageView; 

import java.util.ArrayList; 
import java.util.Random; 
import java.util.Timer; 
import java.util.TimerTask; 

public class MemoryGame extends AppCompatActivity { 

    ImageView imgRed; 
    ImageView imgGreen; 
    ImageView imgBlue; 
    Button btnStart; 

    ArrayList<Integer>array=new ArrayList<>(); 
    int brojac=3; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_memory_game); 

     imgRed=(ImageView)findViewById(R.id.imgRed); 
     imgGreen=(ImageView)findViewById(R.id.imgGreen); 
     imgBlue=(ImageView)findViewById(R.id.imgBlue); 
     btnStart=(Button)findViewById(R.id.btnStart); 

     final RotateAnimation animation=new RotateAnimation(0f,360f, RotateAnimation.RELATIVE_TO_SELF,0.5f, 
                  RotateAnimation.RELATIVE_TO_SELF,0.5f); 
     animation.setDuration(1000); 

     imgRed.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       imgRed.startAnimation(animation); 
      } 
     }); 

     imgGreen.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       imgGreen.startAnimation(animation); 
      } 
     }); 

     imgBlue.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       imgBlue.startAnimation(animation); 
      } 
     }); 

     btnStart.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       for(int i=0;i<brojac;i++) { 
        Random rand = new Random(); 
        int number = rand.nextInt() % 3; 
        if (number == 1) { 
         imgRed.startAnimation(animation); 
        } 
        else if (number == 2) { 
         imgGreen.startAnimation(animation); 
        } 
        else { 
         imgBlue.startAnimation(animation); 
        } 
       } 

      } 
     }); 
    } 
} 

我需要等到一個動畫完成,然後我需要啓動另一個循環迭代。有沒有人有想法如何做到這一點?謝謝!

+0

也許並不理想,但是你知道你的'動畫'會持續一秒'animation.setDuration(1000);'你可以在循環的每次迭代結束時進行睡眠嗎? –

+0

我試過了,但如果我有3次迭代,系統會休眠3秒,然後開始動畫。它不會執行動畫代碼,然後進入睡眠狀態,但是在整個循環之後會啓動動畫。 –

回答

1

在btnStart單擊創建唯一的隨機數,並根據所啓動的動畫

btnStart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) 
     { 

      Random rand = new Random(); 
      int number = rand.nextInt() % 3; 
      if (number == 1) { 
       imgRed.startAnimation(animation); 
      } 
      else if (number == 2) { 
       imgGreen.startAnimation(animation); 
      } 
      else { 
       imgBlue.startAnimation(animation); 
      } 
     } 
    }); 

在setAnimationListener當動畫結束,然後再創建隨機數,取決於開始動畫

final RotateAnimation animation=new RotateAnimation(0f,360f, RotateAnimation.RELATIVE_TO_SELF,0.5f, 
     RotateAnimation.RELATIVE_TO_SELF,0.5f); 
    animation.setDuration(1000); 

    animation.setAnimationListener(new Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      Random rand = new Random(); 
      int number = rand.nextInt() % 3; 
      if (number == 1) { 
       imgRed.startAnimation(animation); 
      } 
      else if (number == 2) { 
       imgGreen.startAnimation(animation); 
      } 
      else { 
       imgBlue.startAnimation(animation); 
      } 

     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 
    }); 
+0

對不起,但是「在這裏做」部分究竟要做什麼。我試圖讓全局計數器i增加到那裏,而不是循環,但仍然循環結束所有3次迭代(初始brojac爲3),然後所有動畫開始,而不是一個ny。還有什麼我可以做的? –

+0

在你開始3動畫時是否正確?假設你啓動了imgRed.startAnimation(動畫);第一次。完成imgRed後,您必須啓動imgGreen才能正確? – user2025187

+0

類似的東西,但哪一個首先取決於我從隨機數發生器得到的隨機數。而我的問題是我想增加brojac(說明有多少次迭代循環有變量),並且在某些情況下它會是12。所以我不能使用AnimationSet及其方法。但是,是的,我想開始一個動畫,然後在循環中生成下一個隨機數,然後爲其他方塊開始動畫(如果數字相同,則可能相同)。但我不希望他們在同一時間,但一個接一個。 –