AirFight.javaにコードを追加して、画像を一定間隔で動かしてみます。drawableファルダーに画像を追加しておいて下さい。 次のプログラムを作成しました。 ユーザーが表示画面をタップすると画像が変るようにしました。 コンストラクタからinit()メソッドに移行します。ここでタイミングを取るためのholderを準備。 setBoardSize()に処理を移し、画像を配列に代入しスマートフォンのディスプレイの縦と横の寸法を取っています。 この時すでにsurfaceCreated()メソッドが自動的に実行され、draw()メソッドが動きスマートフォンにback[0]の画像が表示されます。 onTouchEven()メソッドはスマートフォンをタップすると実行されるメソッドで、タップするとstart()メソッドに処理が移ります。 このメソッドにタイマーが仕組みがプログラミングされ一定間隔でdraw()メソッドを実行していきます。draw()メソッドは実行される 度ごとにその画像が変わるようにしてあります。 package kureishi.example.nationaldefence; import java.util.List; import java.util.concurrent.*; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.app.Activity; import android.content.Context; import android.graphics.*; import android.hardware.*; import android.util.AttributeSet; import android.view.*; import android.graphics.drawable.Drawable; import android.content.res.Resources; import android.os.SystemClock; public class AirFight extends SurfaceView implements SensorEventListener,SurfaceHolder.Callback{ private Activity context; private NationalDefenceActivity nationaldefence; private Drawable[] back; public SurfaceHolder holder; private ScheduledExecutorService executor; public float w,h; public int callBack_count=0; public boolean game_end=false;//とりあえずフラグを作っておきます。今は使いません。 //コンストラクタです public AirFight(Context context){ super(context); init(context); } public AirFight(Context context,AttributeSet attrs){ super(context,attrs); init(context); } public void init(Context context){ this.context=(Activity)context; holder =getHolder(); holder.addCallback(this); setFocusable(true); requestFocus(); nationaldefence=(NationalDefenceActivity) context; setBoardSize(); } public void setBoardSize(){ //ここで画像を3枚配列に代入しておきます。(予めdrawableファルダーに画像をインポートしておく) Resources resources=context.getResources(); back=new Drawable[3]; back[0]=resources.getDrawable(R.drawable.fight_view_0); back[1]=resources.getDrawable(R.drawable.fight_view_2); back[2]=resources.getDrawable(R.drawable.fight_view_3); w=nationaldefence.disp_w; h=nationaldefence.disp_h; } public boolean onTouchEvent(MotionEvent event1){ //スマートフォンをタップするとstart()メソッドが実行される。 switch(n){ case MotionEvent.ACTION_DOWN: start();break; case MotionEvent.ACTION_UP: break; } return true; } public void start(){ //executorインスタンスがタイマーのようなものです try{executor.shutdown();}catch(Exception e){} executor=Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(new Runnable(){ @Override public void run(){ draw(); } }, 1000,1000,TimeUnit.MILLISECONDS); } //このメソッドで1秒間隔でdraw()が実行される public void draw(){ //画像を入れ替えています。 Canvas canvas=holder.lockCanvas(); if(callBack_count==0){ back[0].setBounds(new Rect(0,0,(int)w,(int) h)); back[0].draw(canvas); }else{ int i=callBack_count%(back.length ); back[i].setBounds(new Rect(0,0,(int)w,(int) h)); back[i].draw(canvas); } callBack_count++; holder.unlockCanvasAndPost(canvas); } @Override public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){ //executor.shutdown();ここはコメントアウトしておく } @Override public void surfaceCreated(SurfaceHolder holder){ draw();//このファイルが最初に実行されたときdraw()を実行:注意!! } @Override public void surfaceDestroyed(SurfaceHolder holder){ try{ executor.shutdown(); }catch(Exception e){} } @Override public void onAccuracyChanged(Sensor sensor,int accuracy){} @Override public void onSensorChanged(SensorEvent event){ } } これで画像を動かすことができました。