세라인에서 랜덤으로 블록을 생성하고 한칸이동하고 또 다시 블럭을 생성하고 모든 블럭을 한칸이동하는 반복

자바코드인데요 .. 안드로이드에서 View랑 runnable만 이용해서는 못하나요. 서피스뷰를 이용해야 하나요

 이 코드를 안드로이드 코드로 어떻게 바꿔야 할지 모르겠네요


import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class Music extends Applet implements Runnable{
 
 Thread clock;
 Image off; // 메모리 상의 가상화면
 Graphics offG; //가상화면 출력용 그래픽 컨텍스트 
 Random r;
 Random r2;
 Boolean runGame;
 boolean[][]map; //게임 내의 각  칸의 상태
 Color[][]colorMap; // 게임 내의 각 칸의 색
 Button b1 = new Button();
 Button b2 = new Button();
 Button b3 = new Button();

 int delayTime; //블록이 떨어지는 시간
 
 int block;
 
 int blockY[] = new int[120];
 int[] blockX = new int[120];
 
 Color[] color = new Color[3]; //3종류의 블록의 색상  
 Color[] mycolor = new Color[120];
 
 Panel buttonPanel;
 Button button1;
 
 public void init(){ //가상화면 만들기
  off = createImage(181,316); //가상화면 메모리
  offG = off.getGraphics(); // 가상화면 출력
  offG.setColor(Color.white);
  offG.fillRect(0, 0, 192, 192);
  
  map = new boolean[3][21];
  colorMap = new Color[3][21];
  select();//블록
  drawBlock();//블록그리기
  
  drawMap(); //화면
  drawGrid();//선
  delayTime = 100; //스레드
  runGame = true;
  
  color[0] = Color.red;
  color[1] = Color.blue;
  color[2] = Color.yellow;
  
 
 }

 int x = 0;
 int y = 0;
 int z = 0;
 
 public void select(){
  //블럭선택,색상선택
  if(x>100){
   blockX[x] =0;
   blockY[y] = 0;
   mycolor[z] = Color.white;
   if(x==120){
    runGame = false;
   }
  }
  else{
  r = new Random();
  block = Math.abs(r.nextInt()%3);
  blockX[x] = block;
  blockY[y] = 0;
  mycolor[z] = color[block];
  }
  x++;
  y++;
  z++;
  }
 public void stop(){
  if((clock!=null)&&clock.isAlive()){
   clock = null;
  }
 }


 public void start(){ //run메소드 실행
  if(clock == null){ 
    clock = new Thread(this);
    clock.start();
  }
 }
 
 public void paint(Graphics g) {
  //가상화면을 실제화면에 출력
  g.drawImage(off,0,0,this);
 }
 public void update(Graphics g){
  paint(g);
 }


 public void run(){
  while(true){
   try{
    Thread.sleep(delayTime);
   }catch(InterruptedException ie){}
   //1초
    dropBlock();//블럭삭제,블럭+1,블록그리기
    select(); //블럭생성
    drawBlock();//모든 블럭 다시그려
    if(runGame){
     drawBlock(); //모든 블럭 다시그려
     drawMap(); //화면그리기
     drawGrid(); //선그리기
    }
    repaint();
   }
  }
 
 public void dropBlock(){//블록 1행 밑으로
  removeBlock(); //모든 블록 삭제 
  for(int i=0;i<blockY.length;i++){
   if(blockY[i]==20){
   continue;
   }
  blockY[i] = blockY[i]+1;//다음칸
  }
  drawBlock();//새로그리기
 }
 
 public void removeBlock(){ //모든 블록삭제
  for(int i=0;i<100;i++){
  map[blockX[i]][blockY[i]] = false;
  colorMap[blockX[i]][blockY[i]] = Color.white; 
  }
  }
 
 public void drawBlock(){ // 블록 그리기
  for(int i=0;i<100;i++){
   if(blockY[i]==20){
    continue;
   }
  map[blockX[i]][blockY[i]] = true;
  colorMap[blockX[i]][blockY[i]] = mycolor[i];
   } 
 }
 
 
 
 public void drawMap(){ //화면그리기
  
  for(int i=0;i<3;i++){
   for(int j=0; j<21; j++){    
    if(map[i][j]){
     offG.setColor(colorMap[i][j]);
     offG.fillRect(i*15, j*15, 15, 15);
    }else{
     offG.setColor(Color.white);
     offG.fillRect(i*15,j*15,15,15);
    }
   }
   
  }
 }
 public void drawGrid(){ //그리드 선 그리기
  offG.setColor(new Color(190,190,190));
  
  for(int i=1;i<3;i++){
   offG.drawLine(i*15, 0, i*15, 15*21);
    //offG.drawRect(i*15,i*15,15,15);
  }
 }

}