メモ:Android アプリ作成プラクティス

続いて、 Android アプリ作成の練習として、定番の Hello World からスタート。
公式サイトの Resources にあるチュートリアルがあるので、それをベースで進めます。
http://developer.android.com/intl/ja/resources/tutorials/hello-world.html

AVDの作成


AVD とは、 Android Virtual Device (Android 仮想デバイス)のことらしい。テスト実行用のエミュレータ。
チュートリアルではコマンドラインで作成しているけど、 Eclipse でも可能なので、そちらを利用。
Eclipse から Android SDK and AVD Manager を開く。

画像


左ペインの Virtual Devices を選択すると、現在の AVD 一覧が表示されるが、最初は空っぽ。
右側の New... ボタンを押すと、 Create new Android Virtual Device (AVD) ダイアログが表示される。
Name を適当に入れ(ここでは "avd16")、 Target には対象となる Android のリビジョンを選択(ここでは Android 1.6 を選択)し、 Create AVD 。
Android SDK and AVD Manager はここで一旦閉じる。

画像


新規プロジェクトの作成


Eclipse 上にプロジェクトを作成する。
プロジェクト新規作成の手順から、 New Project ウィザードを開く。
リストの中から Android > Android Project を選択し、次へ。
以下のように適当に設定。

画像


アプリケーションの作成


上記でプロジェクトを作成すると、あらかじめ Activity クラスのソース(HelloAndroid.java)が生成される。
これを以下のように修正。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 以下追加
TextView tv = new TextView(this);
tv.setText("Hello, Android");
setContentView(tv);
// 以下削除
//setContentView(R.layout.main);
}


アプリケーションの実行


コードを修正したら、実行。
Run メニューから Run を実行。実行方法を聞かれるので、 Android Application を選択。
エミュレータ起動後、しばらく待たされたあと(この間、エミュレータはタイムアウト通知するが、待つ)、下記のように表示され、実行される。

画像


但し…


実際には、上記のように Activity から View を直接作成して利用するのは邪道らしい。XML レイアウトを利用して View のレイアウトを記述し、それを Activity から利用するのが筋のよう。プロジェクト新規作成のときに生成された Activity のコード
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

がそれ。
また、そのレイアウトを記述するためのファイルもまた、プロジェクト作成時に res/layout/main.xml として生成されている。そして、その内容は、 HelloWorld と表示されるようになっている。つまり、プロジェクトを新規作成した時点で既に HelloWorld が完成していたそうな。

更なる Hello World... SurfaceView を使って...


SurfaceView は View の一種だけれども、例えばゲームのように随時あるいは時間間隔などによりいつでも描画更新するのに使われるもの。SDK付属のサンプルの、 LunarLander が参考になるが、このサンプル(ゲーム)はキーイベント処理とかがいろいろ含まれるため、これをもとに描画処理のみの View を作成してみた。具体的には、メインの描画用 Thread を用意して走らせ、この中から数秒間隔で View に対し描画(色を黒から白へ変化)させている。


public class SampleView extends SurfaceView {

MainThread mainThread ;

/**
* コンストラクタ。
* コールバックの設定とメインスレッドを初期化。
*
* @param context
* @param attrs
*/
public SampleView(Context context, AttributeSet attrs) {
super(context, attrs);
getHolder().addCallback(new Callback());
mainThread = new MainThread();
}

/**
* コールバックハンドラ。
* メインスレッドを起動制御するだけ。
*
*/
class Callback implements SurfaceHolder.Callback {

Thread t;

public void surfaceCreated(SurfaceHolder holder) {
t = new Thread(mainThread);
t.start();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
mainThread.isRunning = false;
try {
t.join();
}
catch (InterruptedException e) {
}
}
}

/**
* メインスレッド。
* 描画とかんとかいろんなことさせるはずだけど今は描画だけ。
*
*/
class MainThread implements Runnable {

boolean isRunning = true;

public void run() {
int i=0;
while (isRunning) {
i = (i>=255)?0:i+10;
// 描画準備
Paint paint = new Paint();
paint.setColor(Color.rgb(i, i, i));
paint.setTextSize(24);
// 描画開始
Canvas canvas = getHolder().lockCanvas();
canvas.drawText("Hello,World", 30, 30, paint);
getHolder().unlockCanvasAndPost(canvas);
// 描画終了
try {
Thread.sleep(100);
}
catch (InterruptedException e) {
}
}
}
}
}

---
参考:
@IT Androidアプリ作成入門
第1回 Android Market 配布を目指し Eclipse で HelloWorld!
http://www.atmarkit.co.jp/fjava/rensai4/android01/android01_1.html

第12回 SurfaceView なら Android で高速描画ゲームが作れる
http://www.atmarkit.co.jp/fjava/rensai4/android12/android12_1.html

Sharp SH Developers Square (SH01関連)
https://sh-dev.sharp.co.jp/android/

Sony Ericsson developer World (EXPERIA関連)
http://developer.sonyericsson.com/wportal/devworld/technology/android/developer-tools

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック