[Androidアプリ開発]画面表示

Android

Androidアプリの開発の過程を少しずつ書いていこうと考えています。
かなり手探りなのでアドバイスなど頂けたら大変嬉しいです。
最終的には横スクロールアクションゲームの完成を目指します。

  • 使用言語 java
  • 開発ツール AndroidStudio

1回目はプロジェクト作成直後からスタートします。

Android 初期状態

まずはビュークラスを作成します。今回は高速描画が可能と言われているSurfaceViewを使用します。
新規クラスを作成してとりあえずエラーが消えるところまで中身を書きます。

package com.example.dbd.daybyday;

import android.content.Context;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class Stage extends SurfaceView implements SurfaceHolder.Callback {

    //画面変更時の処理
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){}

    //画面破棄時の処理
    @Override
    public void surfaceDestroyed(SurfaceHolder holder){}

    //画面作成時の処理
    @Override
    public void surfaceCreated(SurfaceHolder holder){}

    //コンストラクタ
    public Stage(Context context){
        super(context);
    }
}

でもこのままじゃ画面に何も出ないので
まずは何か描いてみようということで地面っぽいものと球を表示します

package com.example.dbd.daybyday;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class Stage extends SurfaceView implements SurfaceHolder.Callback {

    //画面変更時の処理
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){}

    //画面破棄時の処理
    @Override
    public void surfaceDestroyed(SurfaceHolder holder){}

    //画面作成時の処理
    @Override
    public void surfaceCreated(SurfaceHolder holder){
        Paint paint = new Paint();
        paint.setColor(Color.GREEN);
        Canvas canvas = holder.lockCanvas(); //画面をロックして
        //画面幅いっぱいに高さ150の緑の部分を描画
        canvas.drawRect(0,super.getHeight() - 150, super.getWidth(), super.getHeight(),paint);
        //球も描画
        paint.setColor(Color.RED);
        canvas.drawCircle(super.getWidth() / 2, super.getHeight() - 180, 30,paint);
        holder.unlockCanvasAndPost(canvas); //画面に変更反映
    }

    //コンストラクタ
    public Stage(Context context){
        super(context);

        //この処理でsurfaceCreatedメソッドが動きます
        SurfaceHolder holder = super.getHolder();
        holder.addCallback(this);
    }
}

ここまでで1回エミュレータで確認
初期状態で既に存在するMainActivityクラスを少しだけ変更します。

package com.example.dbd.daybyday;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new Stage(getApplicationContext()));
    }
}

エミュレータを起動してみると

Android1-2

とりあえずちゃんと出ますね。
1回目は画面が出たことにとりあえず満足して、
次回以降は画面スクロールや当たり判定などを実装していく予定です。

コメント

タイトルとURLをコピーしました