Javaプログラミング/Javaプログラミング関連情報

GIFアニメーションを制御するには?(2ページ目)

今回は、JavaでGIFアニメーションを制御する方法について考えてみましょう。

執筆者:掌田 津耶乃

アニメーションの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を返します。


  • 前のページへ
  • 1
  • 2
  • 3
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます