제목그대로입니다...

11X9의 행렬판을 만들고 배열의 값을 바꿔가면서 블럭하나를 위에서 제일 아래로 떨어뜨렸는데요.... 

에뮬에서 실행을 하면 실행과 동시에 블럭이 다 떨어져서 제일 아래에 가 있습니다.

이게 아니라 블럭이 한칸한칸 떨어지는것을 보고 싶은데요.... 

행렬판을 그리고 배열의 값이 1이면 블럭이미지, 0이면 배경이미지를 출력하도록 했습니다.

처음에 초기화시에는 2차원배열의 값들을 0으로 초기화 된 상태에서 배경이미지를 쫘~ 뿌려줬구요....


onDraw 메소드를 이용해서 if 문으로 0인지 1인지 비교해서 1이면 블럭이미지를 출력합니다.

세로로 떨어지는것은 배열의 세로값만 바꿔가면서 제일 윗쪽부터 제일 아랫쪽까지 떨어뜨리는것이구요... 

한번떨어졌다가 잠깐쉬고 한칸떨어졌다가 잠깐쉬고,... 하면서 바닦까지 떨어뜨리고 싶은데요... 

onDraw에 thread.sleep를 사용했더니 블럭이 시간차를 두고 떨어지는게 아니라 프로세스 실행이 시간차를 두고 실행이 되고 쓰레드가 종료된후에 화면 출력은 기존과 동일하게 됩니다.. ㅠㅠ... 

이부분을 어떻게 구현하면 좋을지 여러 고수님들의 의견을 기다립니다..... 



혹시몰라 아래에 소스도 첨부합니다... 


package com.android.hexa;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class HexaTest extends View
{
private static final String TAG = "HEXATEST";
Context context;
//이미지 3개를 만들어 보고..
Bitmap bitmapEmpty = BitmapFactory.decodeResource(getResources(), R.drawable.hexa_back);
Bitmap bitmapBlock1 = BitmapFactory.decodeResource(getResources(), R.drawable.block1);
Bitmap bitmapBlock2 = BitmapFactory.decodeResource(getResources(), R.drawable.block2);
Bitmap bitmapBlock3 = BitmapFactory.decodeResource(getResources(), R.drawable.block3);
//실행중인 상태를 나타내는 거고...
boolean flagStone = true;
private int width = 9;
private int height = 11;
private int startWidth;
private int startHeight=2;
private int blockWidth = 35;
private int blockHeight = 35;
//행렬판을 초기화 하고 행렬판에다가 한번 그려본다.\
int arr2D[][]=new int[height][width];
int temp,temp1;
private void initArr2D()
{
startWidth = width / 2;
for (int i = 0; i <= arr2D.length-1; i++) 
{
for (int j = 0; j < arr2D[i].length-1; j++) 
{
arr2D[i][j]=0;
arr2D[height - 1][j] = 99;
if(i==10&&j==8)
{
Log.v(TAG,"Here!!!");
}
}
arr2D[i][0] = 99;
arr2D[i][width - 1] = 99;
}
}
private void initArr2DMap(Canvas cv)
{
int tmp01, tmp02;
int tmpII, tmpJJ;
for(int i=0;i<height;i++)
{
for(int j=0;j<width;j++)
{
//행렬의 값이 0이면 기본배경바탕을 보여준다.
if(arr2D[i][j]==0){ cv.drawBitmap(bitmapEmpty, j*blockWidth, i*blockHeight, new Paint());} //배경
if(arr2D[i][j]==99){ cv.drawBitmap(bitmapBlock3, j*blockWidth, i*blockHeight, new Paint());} //테두리
//Log.v(TAG,"arr2D["+i+1+"]["+j+1+"] : "+arr2D[i+1][j+1]);
tmpII = i+1;
tmpJJ = j+1;
tmp01 = j*blockWidth;
tmp02 = i*blockHeight;
//Log.v(TAG,"arr2D["+tmpII+"]["+tmpJJ+"] : " + arr2D[tmpII][tmpJJ]);
//Log.v(TAG,"initArr2DMapTmp01 : " + tmp01 + ", initArr2DMapTmp02 : " + tmp02);
}
}
}
@Override
protected void onDraw(Canvas canvas) 
{
initArr2D();
initArr2DMap(canvas);

temp=arr2D[startHeight][startWidth] = 1;
Log.v(TAG,"temp1 : arr2D["+startHeight+"]["+startWidth+"] = " + temp);
int tmp01, tmp02;
Log.v(TAG,"TEST1 : " + arr2D[10][4]);
for (int ii = 0; ii < arr2D.length-1-startHeight; ii++) 
{
if (arr2D[startHeight+ii+1][startWidth]<99)
{
temp = arr2D[startHeight+ii+1][startWidth]; //한칸아래값을 저장
Log.v(TAG,"temp1 : " + temp);
temp1=arr2D[startHeight+ii+1][startWidth] = arr2D[startHeight+ii][startWidth]; //값을바꾸고
arr2D[startHeight+ii][startWidth] = temp; //원래값을 저장
Log.v(TAG,"temp2 : " + temp1);
Log.v(TAG,"temp2-2 : " + arr2D[startHeight+ii][startWidth]);

try 
{
if(arr2D[startHeight+ii][startWidth]==0){ canvas.drawBitmap(bitmapEmpty, startWidth*blockWidth, (startHeight+ii)*blockHeight, new Paint());}
if(arr2D[startHeight+ii+1][startWidth]==1){ canvas.drawBitmap(bitmapBlock1, startWidth*blockWidth, (startHeight+ii+1)*blockHeight, new Paint());}
tmp01 = startWidth*blockWidth;
tmp02 = (startHeight+ii+1+1)*blockHeight;
Log.v(TAG,"tmp01 : " + tmp01 + ", tmp02 : " + tmp02);
Thread.sleep(500);
}
catch (InterruptedException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}
public int positionX(int arrx)
{
int x;
x = 35*arrx;
return x;
}
//생성자
public HexaTest(Context context) 
{
super(context);
this.context = context;
}
}