アニメーションのON/OFFを行う
では、GIFアニメーションのON/OFFを行う簡単なサンプルを作成してみましょう。ここでは、プログラムと同階層にある「anim.gif」というGIFアニメーション・ファイルを読み込み、再生する例を考えてみます。
import java.awt.*;
import java.awt.event.*;
import java.awt.image.ImageObserver;
public class Sample extends Frame {
private Image img = null;
private boolean anim = true;
public static void main(String[] args){
new Sample().setVisible(true);
}
public Sample(){
setSize(300,200);
img = Toolkit.getDefaultToolkit().createImage("anim.gif");
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
this.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent ev){
anim = !anim;
repaint();
}
});
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
g.drawImage(img,50,50,this);
}
public boolean imageUpdate(Image im,int flag,int x,int y,int w,int h){
super.imageUpdate(im,flag,x,y,w,h);
if ((flag & ImageObserver.FRAMEBITS) != 0){
return anim;
}
return true;
}
}
anim.gifを読み込んで表示する。クリックするごとにアニメーションをON/OFFできる。 |
ウインドウ内のマウスでクリックするたびに、アニメーションがON/OFFします。addMouseListenerしている無名クラスのmouseClickedを見てみましょう。ここで、クリックするたびに、アニメーションのON/OFFを設定するためのフラグ変数animをtrue/falseで切り替えています。また、そのあとにrepaintしておくのを忘れないようにしましょう。imageUpdateでreturn falseし、表示の更新が停止されると、その後でアニメーションを再開しようと思ってもimageUpdateは呼び出されませんから、強制的に表示を再描画し、イメージの更新を行わせる必要があるのです。
さて、肝心のimageUpdateを見てみましょう。ここでは、「(flag & ImageObserver.FRAMEBITS) != 0」というようにして、引数に渡されたフラグ変数flagのFRAMEBITSビットが立っているかどうかを確認しています。そしてこれがゼロ以外(すなわちビットが立っている)場合には、アニメーションのON/OFFを決定するanimをreturnします。それ以外の場合は常にtrueを返します。