SurfaceViewで画像表示


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

SurfaceView 以外のクラスから画像を表示させる

ゲーム製作では Character のクラスで画像の生成を行いたい。
しかし、Character クラスを SurfaceView や Activity クラスから extends すると、エラーになる。
そこで、Activity から SurfaceView を通して、Character へ Context を渡してやり、画像を取得する。
import android.app.Activity;
import android.os.Bundle;
 
public class GameActivity extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
	//Contextを渡してる
	setContentView(new SampleSurfaceView(this));
    }
}
 

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
 
public class SampleSurfaceView extends SurfaceView implements Callback, Runnable {
 
	private SurfaceHolder mholder;
	private Thread mLooper;
	Resources res = this.getContext().getResources();
	Bitmap image = BitmapFactory.decodeResource(res, R.drawable.chra_stand_00);
	Context myContext;
	Character C;
 
	public SampleSurfaceView(Context context) {
		super(context);
		mholder = getHolder();
		//callbackメソッドを登録
		mholder.addCallback(this);
		//フォーカスを当てる(必要かよく分からない)
	        setFocusable(true);
	        myContext=context;
	}
	@Override
	public void run() {
		Canvas canvas = null;
		//ここで Character 初期化。contextとcanvasを渡す
		C=new Character(myContext,canvas);
	        //画面に描画
		canvas = mholder.lockCanvas();
	        doDraw(canvas);
		mholder.unlockCanvasAndPost(canvas);
	    }
	}
	private void doDraw(Canvas canvas){
	    Paint paint = new Paint();
	    //描画処理(Lock中なのでなるべく早く)
	    canvas.drawColor(Color.BLACK);
	    canvas.drawBitmap(C.getImage(), 0, 0, paint);
	}
}
 

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
 
public class Character{
 
	Bitmap img0;
 
	public Character(Context context,Canvas canvas) {
		Resources res = context.getResources();
		img0 = BitmapFactory.decodeResource(res, R.drawable.ファイル名);
	}
	public Bitmap getImage() { // 画像を返す
		return img0;
	}
}