イメージの扱いと, Timer クラスによるアニメーション

目次 携帯Javaのページ

最後の更新は次の時刻以降のはず. Time-stamp: "2002/11/09 Sat 18:39"

イメージを Panel に貼ろう

次の例を参考に, Panel クラスを使って自分の作った/作っている i-アプリに 画像をはろう.

/*
  Panel への Image の貼り方
  2002/10/26
 */


import com.nttdocomo.ui.*;

/**
   Panel での Key 入力をうけとる例のクラス
 */
public class ImageSample1 extends IApplication {

    /** 起動するときに呼ばれる メソッド. 必須. */
    public void start(){

	Panel p=new Panel();

	MediaImage mi0=MediaManager.getImage("resource:///pose0.gif");
	MediaImage mi1=MediaManager.getImage("resource:///pose1.gif");

	try{

	    mi0.use();
	    Image img0=mi0.getImage();
	    ImageLabel il0=new ImageLabel(img0);
	    p.add(il0);

	    mi1.use();
	    Image img1=mi1.getImage();
	    ImageLabel il1=new ImageLabel(img1);
	    p.add(il1);

	} catch (Exception e){

	    Label lb=new Label("gif を貼ることに失敗");
	    p.add(lb);

	}
	Display.setCurrent(p);
    }
}



/* 
   Local Variables:
   mode: java
   End:
*/


gif 画像の例はここ. ブラウザの右クリックからイメージを保存.
pose0.gif
pose1.gif
surface.gif
spiral.gif

これをc:\iDK\apps\名前\res に入れる.

gif 画像を作ろう

自分で gif 画像をつくるには, たとえば, Linux のビットマップエディタを
penguin10% bitmap -size 20x30 &
penguin10% xpaint -size 20x30 &
penguin10% gimp &
のように使って, gif で保存する. 必要なら xv で変換して gif にする.

イメージを Canvas に貼ろう

次の例を参考に, Canvas に gif 画像を貼ろう.
/*
  Canvas への Image の貼り方 と Timer を使ったアニメーション
  2002/10/31
 */


import com.nttdocomo.ui.*;
import com.nttdocomo.util.*;	// Timer を使うのに必要.

/**
   Panel での Key 入力をうけとる例のクラス
 */
public class ImageSample2 extends IApplication {

    /** 起動するときに呼ばれる メソッド. 必須. */
    public void start(){

	CanvasWithImage c=new CanvasWithImage();
	Display.setCurrent(c);
    }


}


class CanvasWithImage extends Canvas {

    Image im[];
    int t=0;

    /** コンストラクタ. 最初に1回だけ実行される */
    CanvasWithImage(){
	
	im=new Image[2];

	MediaImage mi0=MediaManager.getImage("resource:///pose0.gif");
	MediaImage mi1=MediaManager.getImage("resource:///pose1.gif");

	try{

	    mi0.use();
	    im[0]=mi0.getImage();

	    mi1.use();
	    im[1]=mi1.getImage();

	} catch (Exception e){

	    //"gif を貼ることに失敗"

	}


    }
	

    public void paint(Graphics g){
	// 特定の座標に, im[0] または im[0] を貼る.
	g.drawImage(im[0],getWidth()/3,getHeight()/4); // 絵を貼る
	g.drawImage(im[1],getWidth()*2/3,getHeight()/4); // 絵を貼る
    }


}

/* 
   Local Variables:
   mode: java
   End:
*/


イメージでアニメーションしよう

次の例を参考に, Canvas クラスで2画像切り替えのアニメーションをしよう.
/*
  Canvas への Image の貼り方 と Timer を使ったアニメーション
  2002/10/31
 */


import com.nttdocomo.ui.*;
import com.nttdocomo.util.*;	// Timer を使うのに必要.

/**
   Panel での Key 入力をうけとる例のクラス
 */
public class ImageSample3 extends IApplication {

    /** 起動するときに呼ばれる メソッド. 必須. */
    public void start(){

	CanvasWithImage c=new CanvasWithImage();
	Display.setCurrent(c);

	Timer ti=new Timer();
	ti.setTime(1000);	// 1000ミリ秒で発生するタイマー
	ti.setRepeat(true);	// 繰り返し発生するタイマー
	ti.setListener(c);	// このクラス c の timerExpired を使用.
	ti.start();		// カウントダウン開始. 一時停止は, ti.stop();

    }


}


class CanvasWithImage extends Canvas implements TimerListener {

    Image im[];
    int t=0;

    /** コンストラクタ. 最初に1回だけ実行される */
    CanvasWithImage(){
	
	im=new Image[2];

	MediaImage mi0=MediaManager.getImage("resource:///pose0.gif");
	MediaImage mi1=MediaManager.getImage("resource:///pose1.gif");

	try{

	    mi0.use();
	    im[0]=mi0.getImage();

	    mi1.use();
	    im[1]=mi1.getImage();

	} catch (Exception e){

	    //"gif を貼ることに失敗"

	}


    }
	

    public void paint(Graphics g){
	// 特定の座標に, im[0] または im[1] を貼る.
	g.clearRect(0,0,getWidth(),getHeight());// 画面を消す
	g.drawImage(im[t],getWidth()/3,getHeight()/4); // 絵を貼る
    }


    /** Timer が 0 になったとき呼ばれるメソッド
	implements TimerListner を宣言したらこれが必要 */
    public void timerExpired(Timer source){ 
	t= (t+1) % 2;		// 時間を進め
	repaint();		// paint() を再度呼び出す.
    }
    


}

/* 
   Local Variables:
   mode: java
   End:
*/


アニメーション gif の再生

実は, この程度のアニメーションなら, アニメーションgif ( gif ファイル自体でアニメーションするもの) を使うという方法もある. アニメーション gif をつくるには, たとえば,
penguin15% gifsicle --delay=10 --loop pose0.gif pose1.gif pose2.gif > anim.gif
などとすればよい.
/*
  Panel への Image の貼り方
  2002/10/26
 */


import com.nttdocomo.ui.*;

/**
   Panel での Key 入力をうけとる例のクラス
 */
public class AnimSample1 extends IApplication {

    /** 起動するときに呼ばれる メソッド. 必須. */
    public void start(){

	Panel p=new Panel();

	MediaImage mi=MediaManager.getImage("resource:///spiral.gif");

	try{

	    mi.use();
	    VisualPresenter vp=new VisualPresenter();
	    vp.setImage(mi);
	    p.add(vp);
	    Display.setCurrent(p);
	    vp.play();

	} catch (Exception e){

	    Label lb=new Label("gif を貼ることに失敗");
	    p.add(lb);
	    Display.setCurrent(p);
	}

    }
}



/* 
   Local Variables:
   mode: java
   End:
*/



Copyright © 2002-2003 Saburo Higuchi. All rights reserved.
樋口三郎, http://www.math.ryukoku.ac.jp/~hig/ hig mail address