EclipseでJAVAを使ったAndroid開発(パソコンはXP)


開発とかやったことなくても多分できる、アンドロイド・アプリの作り方


神経衰弱アプリを作ってみる


ドロイド君


3.並べたカードをめくるには

画面にカードを並べて神経衰弱っぽくなってきたけれども、このカードをめくらないことにはゲームにならない。
そこでここに、カードをめくるという処理を追加しよう。

ただ実際にはここでのカードは、ボタンに画像を表示したものだからね。
つまりはボタンをクリック(タップ)することによって、これを裏の画像から表の画像に変化させるという処理になる。

まずは前回でカードの裏の画像をeclipseに取り込んだのと同様にして、今度は表側の画像を取り込むことにしよう。
表の画像は、とりあえず今回は仮のものを使うことにした。
カードの表の画像(仮)
右クリック(対象をファイルに保存)等でダウンロード → カードの表の画像(仮)

どこをめくってもこの同じ画像が出てくるわけで、コレじゃ神経衰弱にならないけれどもね。
まぁ、最初は簡単なところから。

さてこの画像をeclipseに取り込む方法は、前回のカード裏面の画像取り込みと同じだ。
ドラッグ&ドロップで、「drawable」のフォルダに入れたら完了オッケーだね。

ってわけで、ここからが肝心のプログラムの変更。
クリック(タップ)で、ボタンの画像が変化する処理を追加することにしよう。

と言っても、そんな大げさな処理は必要ない。
以下のコードをご参照あれ、赤字の部分が今回追加した処理だ。

package android.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;

public class AndroidTestActivity extends Activity {
    static final int ROW = 6;   //セルの行数・・・(1)
    static final int COL = 4;   //セルの列数・・・(2)

    @Override
    public void onCreate(Bundle savedInstanceState) {
        //ステータスバーを消去
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);   //・・・(3)
        //タイトルバーを消去
        requestWindowFeature(Window.FEATURE_NO_TITLE);                      //・・・(4)

        super.onCreate(savedInstanceState);

        TableLayout tableLayout = getTableLayout();     //・・・(5)
        setContentView(tableLayout);                    //・・・(6)
    }

    /**
     * テーブルレイアウトを返却
     * @return TableLayout
     */
    private TableLayout getTableLayout() {
        int cellNum = ROW * COL;    //全体のセルの数
        TableLayout tableLayout = new TableLayout(this);
        TableRow tableRow = null;
        for (int i = 0; i < cellNum; i++) {
            if (i % COL == 0) {
                tableRow = new TableRow(this);
                tableLayout.addView(tableRow);
            }
            Button button = new Button(this);
            button.setId(i);                    //・・・(7)
            button.setHeight(getCellHeight());  //・・・(8)
            button.setWidth(getCellWidth());    //・・・(9)
            //ボタンに裏面の画像をセット
            button.setBackgroundDrawable(
                getResources().getDrawable(R.drawable.card_back)
            );
            setEvent(button);                   //・・・(10)
            tableRow.addView(button);
        }
        return tableLayout;
    }

    /**
     * 行数と画面の幅からセルの高さを算出
     * @return セルの高さ
     */
    private int getCellHeight() {
        WindowManager windowManager = getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        return display.getHeight() / ROW;
    }

    /**
     * 列数と画面の幅からセルの幅を算出
     * @return セルの幅
     */
    private int getCellWidth() {
        WindowManager windowManager = getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        return display.getWidth() / COL;
    }

    /**
     * 各ボタンビューにイベントをセット
     * @param button
     */
    private void setEvent(Button button) {
        //タップ時の動作
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Button button = (Button)v;
                button.setBackgroundDrawable(
                    getResources().getDrawable(R.drawable.card_open)
                );
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_android_test, menu);
        return true;
    }
}
さて(10)の行に、ご注目。
引数にボタンをとる「setEvent」というメソッドを追加しているね。

これは何かと言うとボタンにクリックイベントをセットするメソッドで、その定義は下のほうに追加してある10行程度の短いコードだ。
これによってクリック(タップ)したときに、表側の画像を表示する処理がボタンに追加されるんだね。

よく見てみよう、これってどこかで見覚えがないかな。
そう、前にオレ様メッセージをダイアログに表示したときに追加したコードにそっくりじゃないか。

該当のコードをそれぞれ見てみることにしようかな。
これが、オレ様メッセージ表示用のコード

findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        new AlertDialog.Builder(AndroidTestActivity.this).
            setMessage("世界よ、オレの前にひざまずけ").show();
    }
});
そして、こちらが今回のコードの該当部分。

button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Button button = (Button)v;
        button.setBackgroundDrawable(
            getResources().getDrawable(R.drawable.card_open)
        );
    }
});
「OnClickListener」や「onClick」のメソッドについて、思い出したかな。
やってることはほぼ一緒で、クリック(タップ)したときに「ダイアログを表示」するか「ボタンの画像を変えるか」の違いだけだね。

さぁそれではプログラムの変更が完了したので、これを実際にAVDで実行してみよう。
カードをクリックしてみると、画像が変わることが確認できたかな。
AVD実行結果
さて、今回はめくって表示されるカードは一種類だけだった。
次項では実際に神経衰弱として成立するように、たくさんのカードをランダムに並べて表示できるような仕組みを考えてみることにしようかな。



まずは開発環境作り

  1. JDK(Java Development Kit)をインストール
  2. Android SDK(Software Development Kit)をインストール
  3. JDKとSDKの環境変数を設定
  4. Eclipseインストール
  5. EclipseにADT(Android Development Tools) Pluginをインストール
  6. Android SDKパッケージをインストール
  7. AVD(Android Vertial Device)を作成
Eclipseで新規プロジェクトを作成する

  1. まず作業の前に、AVDを日本語表示に
  2. 新規プロジェクトの作成
  3. アプリの実行
デフォルトのプログラムを変更してみる

  1. AVDの画面に表示された文字の元はどこにあるのか?
  2. AVDの画面にボタンを表示させる
  3. プログラムを変更してみる
  4. 変更したプログラムを実行してみる
神経衰弱アプリを作ってみる

  1. イメージを決めて、早速コードを書き始めてみよう
  2. 画面にカードを並べてみよう
  3. 並べたカードをめくるには
  4. カードをランダムに並べる方法を考えて、ついでにカードのクラスも作ってみる
  5. カードをランダムに並べる処理を追加
  6. 実はこれがカードをランダムに並べるメソッドだったのだ
  7. カードのクラスを材料にオブジェクト指向を少しだけお勉強
  8. 並べたカードを表示する
  9. カードをタップして表にしたり裏にしたり
  10. カードの一致をプログラムで判定させる


楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル