마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

타이머 for문 핸들러 를 이용했는데 오류는 없는데 작동이 안되네요

0 추천
스위치 문과 타이머 문을 사용해서 한 코드인데 오류는 없는데 세번째 핸들러 부분이 작동을 안하고 두번째 핸들러 위치에 블록이 멈추네요 ㅠ for문이 잘못됬을까요?

LinearLayout gameview1, gameview2, gameview3, gameview4;
 Button button01;
 Button button02;
 Button button03;
 Button button04;
 Button btn_menu;
 ImageView block1;
 ImageView block2;
 ImageView block3;
 ImageView block4;
 CountDownTimer timer;
 private int mnMilliSecond = 1000;
 private int value = 0;
 int mnExitDelay = 1;
 int delay = mnExitDelay * mnMilliSecond;

 MediaPlayer player; // mediaplayer 선언

 /** Called when the activity is first created. */

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main3);

  gameview1 = (LinearLayout) findViewById(R.id.gameview1);
  gameview2 = (LinearLayout) findViewById(R.id.gameview2);
  gameview3 = (LinearLayout) findViewById(R.id.gameview3);
  gameview4 = (LinearLayout) findViewById(R.id.gameview4);
  button01 = (Button) findViewById(R.id.button01);
  button02 = (Button) findViewById(R.id.button02);
  button03 = (Button) findViewById(R.id.button03);
  button04 = (Button) findViewById(R.id.button04);
  block1 = (ImageView) findViewById(R.id.block1);
  block2 = (ImageView) findViewById(R.id.block2);
  block3 = (ImageView) findViewById(R.id.block3);
  block4 = (ImageView) findViewById(R.id.block4);

  button01.setOnClickListener(new OnClickListener() {

   public void onClick(View v) {
    Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    vibe.vibrate(200);

   }
  });
  button02.setOnClickListener(new OnClickListener() {

   public void onClick(View v) {
    Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    vibe.vibrate(200);

   }
  });
  button03.setOnClickListener(new OnClickListener() {

   public void onClick(View v) {
    Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    vibe.vibrate(200);

   }
  });
  button04.setOnClickListener(new OnClickListener() {

   public void onClick(View v) {
    Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    vibe.vibrate(200);

   }
  });

  player = MediaPlayer.create(this, R.raw.ngyo); // 음악재생 R.raw.에 있는
              // ngyo파일을 불러온다(대문자로 재생시
              // 안됨)
  player.setVolume(0.8f, 0.8f); // 재생시 소리 크기설정

//첫번째 핸들러
  Handler mHandler = new Handler(); // 핸들러에서 음악재생할때 5초의 딜레이를 주고 실행시킨다

  mHandler.postDelayed(new Runnable() {
   public void run() {
    player.start();
    block1.setVisibility(android.view.View.VISIBLE);
    block2.setVisibility(android.view.View.VISIBLE);
    block3.setVisibility(android.view.View.VISIBLE);
    block4.setVisibility(android.view.View.VISIBLE);
    block1.setY(block1.getY() + 10);
    block3.setY(block3.getY() + 10);

   }

  }, 5000);




//두번째 핸들러

  Handler nHandler = new Handler(); // 핸들러에서 음악재생할때 6초의 딜레이를 주고 실행시킨다

  mHandler.postDelayed(new Runnable() {
   public void run() {
    block2.setVisibility(android.view.View.VISIBLE);
    block4.setVisibility(android.view.View.VISIBLE);
    block2.setY(block2.getY() + 10);
    block4.setY(block4.getY() + 10);

   }

  }, 7000);




//3번째 핸들러

  Handler bHandler = new Handler(); // 핸들러에서 음악재생할때 5초의 딜레이를 주고 실행시킨다

  mHandler.postDelayed(new Runnable() {
   
   public void run() {
    for (int a = 0; a <= 3; a++) {
     int i = (int) (Math.random() * 10);
     i += 1;
     switch (i) {
     case 1:
      timer = new CountDownTimer(delay, 1000) {
       @Override
       public void onFinish() {
        block1.setY(block1.getY() + 10);
        block2.setY(block2.getY() + 10);

       }

       @Override
       public void onTick(long millisUntilFinished) {
        value++;
        Log.v("MyAutoExit", Integer.toString(value));
       }
      };
      break;

     case 2:
      timer = new CountDownTimer(delay, 1000) {
       @Override
       public void onFinish() {
        block1.setY(block1.getY() + 10);
        block3.setY(block3.getY() + 10);
       }

       @Override
       public void onTick(long millisUntilFinished) {
        value++;
        Log.v("MyAutoExit", Integer.toString(value));
       }
      };
      break;

     case 3:
      timer = new CountDownTimer(delay, 1000) {
       @Override
       public void onFinish() {
        block1.setY(block1.getY() + 10);
        block4.setY(block4.getY() + 10);
       }

       @Override
       public void onTick(long millisUntilFinished) {
        value++;
        Log.v("MyAutoExit", Integer.toString(value));
       }
      };
      break;
     }
    }
   }
  }, 9000);
대충 이런 코드인데 case1~10 까지 해서 돌려서 블록 이미지가 내려오는것을 만드는데 잘 안되네요 ㅠㅠ 혹시 어느 부분이 잘못됬는지 알려주실수 있나요?

 

익명사용자 님이 2014년 10월 8일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...