容量2GB!アクセス解析&動画ファイルも可能な無料ブログ。アフィリエイト完全対応。
  最新画像一覧   /    おもしろブログが満載! シャッフル ブログ  /     無料登録  

animation表示

  1. 2010/07/23(金) 14:35:59|
  2. android|
  3. トラックバック:0|
  4. コメント:0
複数画像を一つのオブジェクトに持たせてアニメーションさせます。

ImageAnimation.java


package jp.inoue.image;

import java.util.ArrayList;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;


//複数の画像を表示する
public class ImageAnimation {

private int DEFAULT_ANIMATION_PAUSE=3;//指定が無い場合のpause時間
private Loc _loc;//表示位置

private ArrayList<Bitmap> _imgList;
private ArrayList<Loc> _hoseiList;//各画像の位置補正
private ArrayList<Integer> _animationList;//表示パターン
private int _animationCount;

public ImageAnimation(){
_loc=new Loc(0,0);
_imgList=new ArrayList<Bitmap>();
_hoseiList=new ArrayList<Loc>();
_animationList=new ArrayList<Integer>();
_animationCount=0;
}

public void setLoc(int x,int y){
_loc._x=x;
_loc._y=y;
}
public Loc getLoc(){
return _loc;
}

public void setAnimationList(ArrayList<Integer>animationList){
_animationList=animationList;
}

public void resetAnimationCount(){
_animationCount=0;
}

public void addImage(Resources r,int imageNum){
addImage(r,imageNum,0,0,DEFAULT_ANIMATION_PAUSE);
}
public void addImage(
Resources r,int imageNum,int hoseiX,int hoseiY,int pause){
Bitmap bmp = BitmapFactory.decodeResource(r, imageNum);
_imgList.add(bmp);
_hoseiList.add(new Loc(hoseiX,hoseiY));

for(int i=0;i<pause;i++)
_animationList.add(_imgList.size()-1);
}

public void draw(Canvas canvas){
int imgNum=_animationList.get(_animationCount);
Loc hoseiLoc=_hoseiList.get(imgNum);
canvas.drawBitmap(
_imgList.get(imgNum),_loc._x+hoseiLoc._x,
_loc._y+hoseiLoc._y,null);
_animationCount++;
if(_animationCount>=_animationList.size())
_animationCount=0;
}

class Loc{
int _x;
int _y;

Loc(int x,int y){
_x=x;
_y=y;
}
}

}




AnimationTestView.java


package jp.inoue.image;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.view.View;

public class AnimationTestView extends View {

private ImageAnimation _imageAnimation1;
private ImageAnimation _imageAnimation2;

public AnimationTestView(Context context){
super(context);

Resources resources=getResources();

_imageAnimation1=new ImageAnimation();
_imageAnimation1.addImage(resources, R.drawable.cara1_1);
_imageAnimation1.addImage(resources, R.drawable.cara1_2);
_imageAnimation1.addImage(resources, R.drawable.cara1_3);
_imageAnimation1.setLoc(10, 20);

_imageAnimation2=new ImageAnimation();
_imageAnimation2.addImage(resources, R.drawable.cara1_1,0,0,1);
_imageAnimation2.addImage(resources, R.drawable.cara1_2,10,0,1);
_imageAnimation2.addImage(resources, R.drawable.cara1_3,15,0,2);
_imageAnimation2.setLoc(30, 120);

}

protected void onDraw(Canvas canvas) {
_imageAnimation1.draw(canvas);
_imageAnimation2.draw(canvas);
}
}




AnimationTestActivity.java


package jp.inoue.image;

import java.util.Timer;
import java.util.TimerTask;
import android.os.Handler;
import android.app.Activity;
import android.os.Bundle;

public class AnimationTestActivity extends Activity {

private AnimationTestView _view;
Handler handler;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// View の設定
_view = new AnimationTestView(getApplication());
setContentView(_view);

// Timer の設定
handler=new Handler();
Timer timer = new Timer(false);
timer.schedule(new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
_view.invalidate();
}
});
}
},0, 100);
}

}




実行結果


二体の生き物が表示されます。
上はゆっくりとその場でアニメーション
下は座標補正の設定で右に飛んでいるように見える。pauseを少なく設定で素早くアニメーションする。

AnimationTestActivityのTimerの呼び出しを変えると全体の速度が変わる。

DTIブログって?