/* Timerによるアニメーション Time-stamp: "2007-11-15 Thu 14:17 JST hig" Saburo Higuchi 2003,2005-2007 http://www.math.ryukoku.ac.jp/~hig/ プログラム解説等 http://www.a.math.ryukoku.ac.jp/~hig/course/juniors_2007/06/ */ #if DOJA import com.nttdocomo.ui.*; import com.nttdocomo.util.*; // Timer を使う #elif MIDP import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.util.*; // Timer を使う #endif #if DOJA #elif MIDP #else // DoJa/MIDP Builder を使われる方へ: // まず, プログラムの先頭で, #define DOJA // などと定義する必要があります. // 以下の define 文は, #if - #endif の中に書かれていますので, // DoJa/MIDP Builder のプリプロセッサでは処理できません. // そこで, #if - #endif はやめて, // いらない方をJava の意味でコメント文にしてください. #endif #if DOJA #define MYALIGN +0 #define MYAP IApplication #define MYSTART start #define MYBLACK Graphics.getColorOfName(Graphics.BLACK) #define MYWHITE Graphics.getColorOfName(Graphics.WHITE) #define MYBLUE Graphics.getColorOfName(Graphics.BLUE) #define MYRED Graphics.getColorOfName(Graphics.RED) #define MYGREEN Graphics.getColorOfName(Graphics.GREEN) #define MYYELLOW Graphics.getColorOfName(Graphics.YELLOW) #define MYMAGENTA Graphics.getColorOfName(Graphics.MAROON) #define MYCYAN Graphics.getColorOfName(Graphics.AQUA) #define MYDIALOG Dialog #define MYLABEL Label #define MYADD add #define MYTEXT Text #elif MIDP #define MYALIGN ,Graphics.LEFT|Graphics.BOTTOM #define MYAP MIDlet #define MYSTART startApp #define MYBLACK 0,0,0 #define MYWHITE 255,255,255 #define MYBLUE 0,0,255 #define MYRED 255,0,0 #define MYGREEN 0,255,0 #define MYYELLOW 255,255,0 #define MYMAGENTA 255,0,255 #define MYCYAN 0,255,255 #define MYDIALOG Alert #define MYLABEL StringItem #define MYADD append #define MYTEXT String #endif /** MYAP を継承するクラス */ public class TimerAnimSample extends MYAP { /** 起動するときに呼ばれる メソッド. 必須. */ #if DOJA public void start(){ TimerAnimCanvas cc=new TimerAnimCanvas(this); Display.setCurrent(cc); } #elif MIDP public void startApp(){ TimerAnimCanvas cc = new TimerAnimCanvas(this); Display.getDisplay(this).setCurrent(cc); } public void pauseApp(){} public void destroyApp(boolean unconditional){} #endif } class TimerAnimCanvas extends Canvas #if DOJA implements TimerListener // timer のイベントをこのクラスの timerExpired で処理 #elif MIDP #endif { TimerAnimSample parent; private Image im[]; String status; int t; #if DOJA String imagefiles[]={"pose0.gif","pose1.gif"}; #elif MIDP String imagefiles[]={"pose0.png","pose1.png"}; #endif /** コンストラクタ. 最初に1回だけ実行される */ TimerAnimCanvas(TimerAnimSample m){ this.parent=m; im=new Image[imagefiles.length]; #if DOJA MediaImage mi[]; mi=new MediaImage[imagefiles.length]; for(int i=0; i< imagefiles.length; i++){ mi[i]=MediaManager.getImage("resource:///" + imagefiles[i]); // アプリのダウンロード後に Web サーバからイメージをダウンロード // ADF 設定で UseNetwork: http // mi[i]=MediaManager.getImage("http://somehost/somepath/" + imagefiles[i]); } #elif MIDP #endif try{ #if DOJA for(int i=0; i< imagefiles.length; i++){ mi[i].use(); im[i]=mi[i].getImage(); } #elif MIDP for(int i=0; i< imagefiles.length; i++){ im[i]=Image.createImage("/" + imagefiles[i]); } #endif status="イメージ読み込み成功"; } catch (Exception e){ //"gif を読み込むことに失敗" status="イメージ読み込み失敗"; } Timer ti=new Timer(); // Timer を作る. #if DOJA ti.setTime(1000); // 1000ミリ秒で鳴るタイマー ti.setRepeat(true); // 繰り返し鳴るタイマー ti.setListener(this); // このクラス cc の timerExpired を使用. ti.start(); // カウントダウン開始. 一時停止は, ti.stop(); #elif MIDP Periodic pe=new Periodic(this); ti.schedule(pe, 2000, 1000); // 2000ミリ秒後から1000ミリ秒ごとに // pe の run メソッドを呼び出す // ti.cancel() でクリア #endif } public void paint(Graphics g){ // 特定の座標に, im[0] または im[0] を貼る. g.setColor(MYWHITE); g.fillRect(0,0,getWidth(),getHeight()); // 画面を消す g.drawImage(im[t],getWidth()/2,getHeight()/4 MYALIGN); // 絵を貼る g.setColor(MYBLACK); g.drawString("" + t + " " + status,0,getHeight()/2 MYALIGN); } public void increment(){ t=(t+1)%2; repaint(); } #if DOJA /** Timer が 0 になったとき呼ばれるメソッド implements TimerListner を宣言したらこれが必要 */ public void timerExpired(Timer source){ increment(); } #elif MIDP #endif } #if DOJA #elif MIDP class Periodic extends TimerTask { TimerAnimCanvas ic; Periodic(TimerAnimCanvas ic){ this.ic=ic; } /** Timer が expire したとき呼ばれるメソッド */ public void run(){ ic.increment(); } } #endif /* Local Variables: mode: java End: */