チーム制作 4 [ 基本のクラス作成 ]
それぞれがその動きだけするクラスを作成。
準備状態
・髭と足をそれぞれに動かしたい為画像を分割。
・drawableフォルダにそれぞれh20.jpg、b20.jpgを準備。
・→後々はframe++することによって動きを付ける予定。
分担作業前に準備したクラス(Kさん作成)
MainActivity
---------------------------------------------
public class MainActivity extends Activity {
private GokiSurface gokiSurface;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.gokiSurface = (GokiSurface) findViewById(R.id.gokisurface);
this.gokiSurface.setGokiController(new GokiController(this));
}
@Override
protected void onPause() {
super.onPause();
gokiSurface.surfaceDestroyed(null);
}
}
---------------------------------------------
GokiSurface.java
---------------------------------------------
public class GokiSurface extends SurfaceView implements Runnable,
android.view.SurfaceHolder.Callback {
private Thread thread;
private Bitmap image;
private Paint paint;
public GokiSurface(Context context, AttributeSet attrs) {
super(context, attrs);
this.image = BitmapFactory.decodeResource(context.getResources(),
R.drawable.g20);
this.paint = null;
SurfaceHolder holder = getHolder();
holder.addCallback(this);
holder.setFixedSize(getWidth(), getHeight());
setFocusable(true);
}
@Override
public void draw(Canvas canvas) {
canvas.save();
canvas.drawColor(Color.WHITE);
//canvas.drawBitmap(image, 100, 100, paint);
Matrix matrix=new Matrix();
matrix.setScale(2.0f, 2.0f);
matrix.postTranslate(30, 50);
canvas.drawBitmap(image, matrix, paint);
canvas.restore();
}
@Override
public void run() {
while (thread != null) {
Canvas canvas = getHolder().lockCanvas();
draw(canvas);
getHolder().unlockCanvasAndPost(canvas);
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
this.thread = new Thread(this);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
this.thread = null;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
}
-----------------------------------------------
GokiController.java
---------------------------------------------
public class GokiController {
private Context context;
private GokiFactory factory;
private SuperGoki currentGoki;
public GokiController(Context context) {
super();
this.context = context;
this.factory=new GokiFactory(context);
this.currentGoki=factory.create(0);
}
public void draw(Canvas canvas) {
if (currentGoki!=null) currentGoki.draw(canvas);
}
//追加
public SuperGoki getCurrentGoki() {
return currentGoki;
}
}
---------------------------------------------
GokiFactry.java
---------------------------------------------
public class GokiFactory {
private Context context;
public GokiFactory(Context context) {
super();
this.context = context;
}
public SuperGoki create(int id) {
// それぞれの担当のクラスを返す
return new ReverseGoki(this.context);
}
}
---------------------------------------------
SuperGoki.java
---------------------------------------------
public SuperGoki(Context context) {
super();
this.context = context;
this.antennaBitmap = BitmapFactory
.decodeResource(context.getResources(), R.drawable.h20);
this.bodyBitmap = BitmapFactory
.decodeResource(context.getResources(), R.drawable.b20);
}
public Bitmap getAntennaBitmap(int frame) {
return antennaBitmap;
}
public Bitmap getBodyBitmap(int frame) {
return bodyBitmap;
}
/**
* 音を出す。
* @param name: 音の名前
* @param loop: ループ回数
*/
public void play(String name, int loop) {
// TODO:
}
public void vibrate(int duration) {
// TODO:
}
public void vibrate(int[] durations) {
// TODO:
}
}
------------------------------------------------------
この状態から担当の裏返る動きをするクラス[ ReverseGoki.java ]を作成