본문 바로가기
Android 개발/Java

MediaTracker Class

by 독학하는 1인 개발자 2011. 8. 4.

Android 개발 Java


Media Tracker Class 사용 방법





MediaTracker myTracker = new MediaTracker(this);
Image myImage = getImage(getCodeBase(), "FileName");
myTracker.addImage(myImage, 0);

addImage() 메소드의 첫 번째 인수는 추적할 이미지이고, 두 번째 인수는 ID입니다.
이 ID를 통해서 프로그램이 해당하는 이미지가 로드되었는지 알 수 있습니다. ID는 각 이미지마다 고유하게 부여하는 것이 아니고, 같이 처리하고 싶은 이미지 그룹마다 부여해 주면 됩니다. 예를 들어, 게임에서 타이틀에서 필요한 이미지 10개는 ID를 0으로 하고, 스테이지 1에서 필요한 이미지 25개는 1로 부여했다면, 다음처럼 ID가 0인 이미지들이 로드될 때까지 기다릴 수 있습니다.

myTracker.waitForID(0);

만약 ID와 상관없이 등록된 모든 이미지가 로드될 때까지 기다리고 싶다면, waitForAll()메소드를 사용하면 됩니다.

MediaTracker 클래스의 대표적인 메소드들

void addImage(Image img, int id) - 이미지 img를 id로 등록
void addImage(Image img, int id, int w, int h) - 가로 w, 세로 h 크기로 스케일한 이미지 img를 id로 등록
void waitForAll() - 등록된 모든 이미지들이 로드될 때까지 대기
void waitForID(int id) - id로 등록된 이미지들이 로드될 때까지 대기





/* MediaTrackerTest.java */


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

public class MediaTrackerTest extends Applet implements Runnable{
 
 int imageTotal;
 int imageLoaded;
 
 Image javacup[];
 Thread clock;
 
 MediaTracker myTracker;
 
 public void init(){
  imageTotal = 10;
  imageLoaded = 0;
  
  myTracker = new MediaTracker(this);
  
  javacup = new Image[imageTotal];
  
  for(int i=0; i<imageTotal; i++){
   javacup[i] = getImage(getCodeBase(), "javacup"+i+".jpg");
   myTracker.addImage(javacup[i], i);
  }
 }
 
 public void start(){
  if(clock==null){
   clock = new Thread(this);
   clock.start();
  }
 }

 public void paint(Graphics g){
  if(imageLoaded<imageTotal){
   g.setColor(Color.blue);
   g.drawRect(72, 115, 150, 40);
   g.fillRect(72, 115, imageLoaded*10, 40);
  }else{
   for(int i=0; i<3; i++){
    for(int j=0; j<5; j++){
     g.drawImage(javacup[i*5+j], j*59, i*90, 59, 90, this);
    }
   }
  }
 }
 
 public void update(Graphics g){
  paint(g);
 }
 
 public void run(){
  for(int i=0; i<imageTotal; i++){
   try{
    myTracker.waitForID(i);
   }catch(InterruptedException ie){}
   
   while((myTracker.statusID(i, true) & MediaTracker.COMPLETE) == 0 ){}
   
   imageLoaded++;
   
   repaint();
   
   try{
    clock.sleep(50);
   }catch(InterruptedException ie){}
  }
 }
 
 public void stop(){
  if((clock!=null)&&(clock.isAlive())){
   clock=null;
  }
 }
}


로딩화면도 만들 수 있다.

댓글