programming24 第2回androidアプリ勉強会

97
コデアルAndroidアプリ勉強会 - Programming 24 -

Upload: codeal

Post on 23-Jun-2015

698 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Programming24 第2回androidアプリ勉強会

コデアルAndroidアプリ勉強会

- Programming 24 -

Page 2: Programming24 第2回androidアプリ勉強会

到達目標

● 人に見せられるAndroidアプリが作成できる

(名刺代わりのアプリ)

(生活を便利するアプリ)

● 現在地をメールするアプリ

Page 3: Programming24 第2回androidアプリ勉強会

Androidアプリの開発に必要な知識を身につける

1.Androidとは

2.開発環境を準備する

3.Javaの基礎

4.Androidアプリの作成

5.基本的なUI作成

Page 4: Programming24 第2回androidアプリ勉強会

現在地をメールするアプリ

● GPS情報の取得

● プリファレンス(情報の記憶、保持)● メール送信(インテント)

Page 5: Programming24 第2回androidアプリ勉強会

1.Androidとは

● googleが開発したスマートフォン用のOS● ライセンスフリーのOS(Linuxカーネル)

● 2014年現在、スマートフォン用のOSとしては、シェア1位

● 2003年に、Android社設立

● 2005年にgoogleが買収

● 2009年に、開発ツールAndroidSDKr1.5リリース

(この時点から、市場に登場)

Page 6: Programming24 第2回androidアプリ勉強会

● 開発ツール、技術ドキュメント、ソースコードを誰でも無償で入手することができる

● スマートフォン以外の組み込み分野へ展開されている

例えば、ネットブック、カーナビ、TVレコーダ、デジタル家電など

Page 7: Programming24 第2回androidアプリ勉強会

Androidで何ができるのか?

● 次のような機能を利用したアプリを作成できる

- 音声通話(電話)

- フルブラウザによるWebサイト閲覧

- 2D/3Dグラフィックスの描画

- 音声、映像、静止画の表示・再生

- カメラ(静止画、動画)

- Bluetooth、WiFiによるデータ通信

- GPS

- NFC

Page 8: Programming24 第2回androidアプリ勉強会

- SQLiteによるデータストレージ

- 各種センサー

 加速度センサー、傾きセンサー、磁気センサー

 温度センサー、明るさセンサー、接近センサー

 ジャイロスコープ、圧力センサーなど

 

Page 9: Programming24 第2回androidアプリ勉強会
Page 10: Programming24 第2回androidアプリ勉強会

Androidのバージョン1 Android 1.0 Astro

2 Android 1.1 Bender

3 Android 1.5 Cupcake ←ここから、google

4 Android 1.6 Donut   コードネームがスイーツ名

5 Android 2.0/2.1 Eclair

6 Android 2.2 Froyo

7 Android 2.3 Gingerbread

8 Android 3.x Honeycomb

9 Android 4.0 Ice Cream Sandwich

10 Android 4.1/4.2/4.3 Jelly Bean

11 Android 4.4 KitKat

Page 11: Programming24 第2回androidアプリ勉強会

API Level

● バージョンに対応したAPI Levelが決められている。

● API Levelにより、使える機能が変わる。

● 開発時には、どのAPI Levelを対応するか、決める

必要がある。

● また、開発情報を調べる際にも、どのAPI Levelに対応した情報かを意識しなければならない。

Page 12: Programming24 第2回androidアプリ勉強会

2.開発環境を準備する

● 開発に必要なもの

1)統合環境

Eclipseまたは、Android Studio

2)AndroidSDK

3)プログラミング言語

 Java

1)と2)は、統合環境に含まれている

  

Page 13: Programming24 第2回androidアプリ勉強会

開発ツールダウンロード1

● ここでは、Eclipseを使います。実はAndroid Studioの方が評判が良いのですが、今のところ、Eclipseの方がメジャーのため。

● SDKダウンロード

http://developer.android.com/sdk/index.html

MACの場合は、

[DOWNLOAD FOR OTHER PLATFORMS]をクリック

Page 14: Programming24 第2回androidアプリ勉強会

開発ツールダウンロード2

● Java SE 7 Development Kit (JDK)ダンロードhttp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

● Pleiadesプラグインダウンロード

Eclipseを日本語化するためのプラグイン

http://mergedoc.sourceforge.jp/

Page 15: Programming24 第2回androidアプリ勉強会

開発環境インストール1

● JDKのインストール

デフォルト設定のままインストール

注意)統合環境が64Bit版の場合は、64Bit版のJREが必要になります。

● Android SDKのインストール

AndroidSDKのzipを適当なフォルダーで解凍。

フォルダーをADTとリネームしてCドライブのルート直下に移動。

Page 16: Programming24 第2回androidアプリ勉強会

開発環境インストール2

● Eclipseの日本語化

● Pleiadesプラグインを導入

● ダウンロードしたpleiades.zipを解凍

● 解凍したファイルを全てEclipseのフォルダーの下に移動

Page 17: Programming24 第2回androidアプリ勉強会

開発環境インストール3

● eclipseフォルダーの中にあるeclipse.iniファイルを編集。eclipse.iniの末尾に-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=default.splash

という記述を付加。

● Eclipse.exeを実行 

↑これで、準備完了!

Page 18: Programming24 第2回androidアプリ勉強会

Javaの基礎

● Javaを使って、Androidアプリを作成するため。

● Javaの基礎を学ぶ。

● よく使いそうな部分だけ、抜粋して説明。

Page 19: Programming24 第2回androidアプリ勉強会

Javaの基礎

● Androidアプリ用に、準備した開発環境で、Javaの基礎を学ぶために、コンソールアプリで試す。

● コンソールアプリは、ちょっとしたコードを試すのに、便利です。

● Androidアプリを開発するときも、小さい機能を試すときに、コンソールアプリで試すことは、よくあります。

Page 20: Programming24 第2回androidアプリ勉強会

Javaの基礎

● Androidアプリ用に、準備した開発環境で、Javaの基礎を学ぶために、コンソールアプリで試す。

● コンソールアプリは、ちょっとしたコードを試すのに、便利です。

● Androidアプリを開発するときも、小さい機能を試すときに、コンソールアプリで試すことは、よくあります。

Page 21: Programming24 第2回androidアプリ勉強会

Eclispeでコンソールアプリ

● Eclipseを起動します

● ファイルメニューの新規で、Javaプロジェクトを選択します。(Androidアプリの場合とは異なります)

● Javaプロジェクトの作成画面が開きます

● プロジェクト名を入力(任意の名称)● 完了をクリック● プロジェクトを選択して、右クリックメニューから

新規を選び、その中のクラスを選択● クラスの作成画面が表示されます

Page 22: Programming24 第2回androidアプリ勉強会

Eclispeでコンソールアプリ

● 名前(クラス名)を入力します(任意の名前)

説明をわかりやすくするため、「Sample」としておきましょう。

● public static void main()の欄にチェックを入れる

● Sample.javaというファイルが作成され、

ファイル内には、Sampleクラスがあり、メソッドとして、main()ができています。main()次の中カッコの中に、プログラムを書いていきます。

Page 23: Programming24 第2回androidアプリ勉強会

最初のプログラム

● main()の下にある、todoの次の行に、プログラムを

書いていきます。

● 「syso」と入力して、CTRL+スペースを押してください。(コード補完のショートカット)

● System.out.println()というコードが書かれます

● System.out.println()の()の中に、文字を書きます。””で囲った中に好きな文字を入力してください。名前などで構いません。

● メニューの実行から、実行を選びます。● 文字が、画面下のコンソールに出力されます。

Page 24: Programming24 第2回androidアプリ勉強会

最初のプログラム

● 問題がなければ、文字が出力された思います。● 問題があった場合は、エラーとなっています。● エラー原因を取り除いて、再度、実行しましょう。● 下部の問題というタブを除くとエラー要因が書かれ

ています。● エラーの修正は、慣れるまでは、とても大変な作業

です。

Page 25: Programming24 第2回androidアプリ勉強会

エラーの修正のコツは(重要!)

● 1行目のエラーに注目すること。

2行目以降のエラーは、1行目が原因で出ていることがあるので、1行目を無視してはいけない。

● 小さく作って、小さく試す。

たくさんのコードを一度にコンパイルすると、エラーが多すぎて、探しにくいです。

● 行数の多いコードのエラーを見つけるには、2分探索を用いると早く原因にたどり着けます。

● エラー内容をコピーして、googleで検索。

Page 26: Programming24 第2回androidアプリ勉強会

変数とは

● 値を入れる箱のようなもの● 型がある。箱のサイズ、種類が決まる

● とりあえず、int型とboolean型を覚えよう。

● プリミティブ型(基本的な型)

● intは、整数を扱う型。

(-2147483648~2147483647)● booleanは、ture(真)かfalse(偽)

Page 27: Programming24 第2回androidアプリ勉強会

変数の使い方1

● 宣言方法

型名 変数名;● 変数名は、AからZ、aからz、0から9、アンダーバー

(_)が使える。但し、先頭に数字は使えない。

任意の名前をつけることができる。

わかりやすい名前をつけた方が後で読みやすい。● 例

int abc01;

boolean a_flag;

Page 28: Programming24 第2回androidアプリ勉強会

変数の使い方2

● 変数に値を代入する● 例

int temp;

temp = 10;

boolean flag;

flag = false;

Page 29: Programming24 第2回androidアプリ勉強会

変数の使い方3

● 変数の値を表示してみる

● 最初に使ったSystem.out.println()を使って。

int temp = 100;

System.out.println(temp);● 上記を先ほど書いたプログラムのmain()の中に書

いて動かしてください。● 以下の文を追記して、動かしてください。

System.out.println(“Valude = “ + temp);

int temp = 100;

Page 30: Programming24 第2回androidアプリ勉強会

演算子

● コンピュータなので、当然計算ができます。● 計算の時に使うのが演算子です。

四則演算+剰余の演算。

● + 足し算

● - 引き算

● * 掛け算

● / 割り算

● % 剰余

Page 31: Programming24 第2回androidアプリ勉強会

演算子を使う

● 以下の演算で、temp3の値がどうなるか試すこと。

● int temp1 = 100;

int temp2 = 30;

int temp3 = 0;

temp3 = temp1+temp2;

temp3 = temp1-temp2;

temp3 = temp1*temp2;

temp3 = temp1/temp2;

temp3 = temp1%temp2;

Page 32: Programming24 第2回androidアプリ勉強会

制御構文(if文)

● 分岐をするための構文

int money = 100;

if(money >= 120){

System.out.println(“缶ジュース”);

} else {

  System.out.println(“購入不可能”);

}

moneyの値を変えて、「缶ジュース」を表示してください。

Page 33: Programming24 第2回androidアプリ勉強会

制御構文(for文)

● 繰り返しを行うための構文

for(int i=1;i<=10;i++) {

System.out.println(“繰り返し:” + i);

}● Money >= 120、i<=10は、条件式

● >=、i<=は、比較演算子。等しいは、==● if文、for文ともに、入れ子可能

Page 34: Programming24 第2回androidアプリ勉強会

演習

● 二つの変数(int)を準備し、大きい方の数を

if文で判定し、表示しなさい。

(数値の値を変えても動作が正しいこと)● 1から100までの奇数を表示

(forとifの組み合わせ)

奇数の判定は、剰余を使うと簡単。

Page 35: Programming24 第2回androidアプリ勉強会

関数

● 入力を与えて、出力を得る● 入力のことを引数という● 出力を戻り値という

● function(x,y)=x+yは、

int plus(int x,int y){

return x+y;

}

Page 36: Programming24 第2回androidアプリ勉強会

関数

● 前のページのままでは、コンパイルが通りません。

public static int plus(int x,int y){

return x + y;

} ● この関数の呼び出しは

int a = 10;

int b = 90;

int answer = plus(a,b);

Page 37: Programming24 第2回androidアプリ勉強会

関数

● 関数の定義

型名 関数名(型名 仮引数名) {

// 処理

}● 関数の呼び出し

関数名(実引数名);● 戻り値がない場合は、型名をvoidとする。その場合

は、returnが不要となる。

Page 38: Programming24 第2回androidアプリ勉強会

演習

● 割引計算関数 discount();を作成

● 引数に元の値段を与えて、値引き後の値段を得る

(割引率は30%)(*整数演算だけで行う)

元の値段が100なら、値引き後は、70が得られる。

Int result = discount(100);● 割引率を2つめの引数として関数を作成。

*割引率も整数

Page 39: Programming24 第2回androidアプリ勉強会

オブジェクト指向

● クラス

変数定義(フィールド)とメソッド定義からなる設計書。(レシピのようなもの)

● メソッド

関数定義と同様。● インスタンス生成

クラス(設計書)を元に、実体を作ること。

(レシピを見て、実際の料理を作るイメージ)

Page 40: Programming24 第2回androidアプリ勉強会

オブジェクト指向

● クラス

変数定義(フィールド)とメソッド定義からなる設計書。(レシピのようなもの)

● メソッド

関数定義と同様。● インスタンス生成

クラス(設計書)を元に、実体を作ること。

(レシピを見て、実際の料理を作るイメージ)

Page 41: Programming24 第2回androidアプリ勉強会

クラスの書き方(例:Dogクラス)

class Dog

{

private String Name; // Stringは、文字列型

public void setName(String n){

Name = h;

}

public void showProfile(){

System.out.println(“名前は、” + Name + “です”);

}

}

Page 42: Programming24 第2回androidアプリ勉強会

クラスの使い方

● インスンタンスの生成

● 先ほどのDogクラスを使ってみる

// インスンタンスの生成

Dog myDog = new Dog();

myDog.setName(“たろう”);

myDog.showProfile();

Page 43: Programming24 第2回androidアプリ勉強会

演習

● 例題のDogクラスに、次の内容を追加してください

年齢を保持するint型のフィールドを定義。

● 年齢を設定するメソッド、SetAge。

● ShowProfileメソッドで名前、年齢を表示するようにする。

● 修正したDogクラスを使用して次のプログラムを作成しなさい。

● Dogクラスのインスタンスを作成する。

● 名前、年齢を設定する。

● プロフィールを表示する。

Page 44: Programming24 第2回androidアプリ勉強会

配列とコレクションクラス

● 配列は、あまり使わずにコレクションクラスを使うことが多いので、あえてコレクションクラスを一緒に説明します。

● 配列とは、複数の変数を同じ名前でまとめて扱えるようにしたもの。

● 例えば、Seito01,Seito02,Seito03,Seito04のように、4つ変数で4人分のデータを表現する代わりに

● int Seito[] = new int[4]; これで、4人分のデータを定義できる。使い方は、Seito[0]、Seito[1]のように、カッコの中に数値を入れてアクセスする。

Page 45: Programming24 第2回androidアプリ勉強会

配列の使いづらい点

● int Seito[] = new int[4];のようにした場合

● Seito[4] = 100; とすると配列の範囲をこえるので、エラーとなる。(プログラムが落ちる)

● 最初の要素数を超えた場合、後で、要素数を拡張しようとしてもできない。

Page 46: Programming24 第2回androidアプリ勉強会

コレクション(ArrayList)クラス

● 書き方

ArrayList<型> 変数名 = new ArrayList<型>();● 先ほどの配列をArrayListにしてみる

ArrayList<Integer> Seito

      = new ArrayList<Integer>();● 型は,プリミティブ型が使えない。

● データの追加は、

Seito.add(10);

Page 47: Programming24 第2回androidアプリ勉強会

コレクション(ArrayList)クラス

● データの取得

int temp = Seito.get(0);

● 要素数の取得

int count = Seito.size();

● 要素の検索

int index = Seito.size(100);

● 要素のさくじょ

Seito.remove(1);  // 任意の場所

Seito.clear(); // 全ての要素のクリア

● ソート

Collections.sort(Seito);

Page 48: Programming24 第2回androidアプリ勉強会

● コード例ArrayList<Integer> Seito = new ArrayList<Integer>();

Seito.add(300);

Seito.add(250);

Seito.add(400);

Seito.add(100);

Collections.sort(Seito);

// Seito.remove(2);

// Seito.clear();

for(int i=0;i<Seito.size();i++) {

System.out.println(Seito.get(i));

}

Page 49: Programming24 第2回androidアプリ勉強会

Stringクラス

● 文字列を扱うクラス

String temp = “ab,cde,fg”;● 長さを取得

int len = temp.length();● 文字列の検索

int posi = temp.indexOf(“cde”);● 文字列の分割

String temp2[] = temp.split(“,”);

Page 50: Programming24 第2回androidアプリ勉強会

● コード例

String aaa = "ab,cde,fg";

System.out.println(aaa.length());

System.out.println(aaa.indexOf("cde"));

String abc[] = aaa.split(",");

for(int i=0;i<abc.length;i++) {

System.out.println(abc[i]);

}

Page 51: Programming24 第2回androidアプリ勉強会

● コード例

String aaa = "ab,cde,fg";

System.out.println(aaa.length());

System.out.println(aaa.indexOf("cde"));

String abc[] = aaa.split(",");

for(int i=0;i<abc.length;i++) {

System.out.println(abc[i]);

}

Page 52: Programming24 第2回androidアプリ勉強会

Androidアプリの作成

● いよいよAndroidアプリの開発に入ります。

● プロジェクトの作成

今までは、ファイルメニューの新規で、Javaプロジェクトを選択していましたが、今回から、Androidアプリケーション・プロジェクトを選択します

● 新規Androidアプリケーションダイアログが表示されます。

Page 53: Programming24 第2回androidアプリ勉強会

新規Androidアプリケーション

● アプリケーション名

アイコンに表示する名前● プロジェクト名

このプロジェクトにつける名前

(アプリケーション名と同じで構わない)● パッケージ名

アプリの名前の衝突をさけるための名称

Javaの慣習として、ドメイン名を利用することが多い。

Page 54: Programming24 第2回androidアプリ勉強会

次に

● その他は、初期値のまま。● ここまでの作業で、空のアプリができています。

Page 55: Programming24 第2回androidアプリ勉強会

動作確認

● 実機につないで動作確認でも良いのですが、

まずは、エミュレータで実行します。

● そのために、Android仮想デバイスを作成します。

Page 56: Programming24 第2回androidアプリ勉強会

Android仮想デバイスの作成

● ウィンドウメニューから、Android仮想デバイスマネジャーを選択

● 新規ボタンをクリック

● AVD名は、任意

● デバイスの選択は、ターゲットの画面サイズにより選択

● Skinは、「Skin with dynamic hardware controls」を選択

Page 57: Programming24 第2回androidアプリ勉強会

Android仮想デバイス

● 作成が完了したら、エミュレータを動かしてみる

● かなり遅いです。PCが遅いと数分かかる。

● 起動すると、Androidの画面が表示される

● 画面の機能確認であれば、十分に使えます。

● 特に、Androidは、画面サイズがたくさんあるので、

すべての装置を準備できない場合は、エミュレータだけで確認することがあります。

Page 58: Programming24 第2回androidアプリ勉強会

アプリの動作確認

● 実行画面より、実行を選択すると

エミュレータ上に、先ほど作成したアプリの画面が表示されます。

Page 59: Programming24 第2回androidアプリ勉強会

実機での動作確認

● 実機を持っている人は、実機で動作させる方が、動作確認が早い。

● 実機以外に必要なもの

USBケーブル(通信用)

*間違えて、充電を使っても動作しません。

● 対象の実機用のADB用USBドライバをインストールする必要があります。これは、対象の実機によって変わります。対象の実機のサイトでダウンロードすることになります。(Windowsの場合)

Page 60: Programming24 第2回androidアプリ勉強会

実機の接続確認

● 実機のUSBデバッグを有効にする必要があります

実機のバージョン、機種によって、設定箇所が異なります。

● Eclipseで、DDMSを選ぶとデバイスが繋がっている場合は、デバイス一覧に名称が表示されます。

● DDMSでは、デバイス内のファイルを見ることも可能です。

Page 61: Programming24 第2回androidアプリ勉強会

USB デバッグを有効にする

● [設定|開発者向けオプション]で[USB デバッグ]

オプションをオンにします。

● Android 4.2 以降では、[開発者向けオプション]がデフォルトで非表示になっています。

● [設定|<デバイス種別>情報]を開き、下部の[ビルド番号]を 7 回タップすると、[設定|開発者向けオプション]が使用可能になります。

● [スリープしない]オプションをオンにした方が開発しやすい。

Page 62: Programming24 第2回androidアプリ勉強会

必要なファイルの説明

● よく使うファイル・フォルダに限って説明します● srcフォルダ

Androidアプリを作成するJavaのコードがある場所

● resフォルダ

レイアウトファイル、アイコンなどのリソースがある場所

● AndroidMnifes.xml

アプリの設定を決めるファイル

Page 63: Programming24 第2回androidアプリ勉強会

とりあえず、動かしたい

● 主要コンポートの説明の前に、動かしている実感が湧くアプリを書いてみましょう。

● モチベーションを維持するために、とりあえず動してみます。

● プロジェクトの作成

Androidアプリケーション・プロジェクトを選択

Page 64: Programming24 第2回androidアプリ勉強会

新規Androidアプリケーション

アプリケーション名、プロジェクト名、パッケージ名は、好きな名称をつけてください。

● 最小必須SDKを、API 14 

Android4.0(IceCreamSandwich)に設定。

● テーマをNoneに設定。

● それ以外は、初期値のまま完了まで進んでください。

*最小必須SDKを、API 14したのは、余分なコードが作成されないようにするためです。

Page 65: Programming24 第2回androidアプリ勉強会

余分なコードを消す

● onCreateOptionsMenu()を削除

● onOptionsItemSelected()を削除

● class PlaceholderFragment()を削除

● if (savedInstanceState == null){のブロックを削除

● setContentView()の引数をnullに。

ビルドが通ることを確認してください。

*このまま実行しても、動作しません。

Page 66: Programming24 第2回androidアプリ勉強会

Viewクラスの作成

● クラスの作成機能を使って、Viewクラスを作成します。

● クラス名は、「SampleView」としておいてください。

名前に意味はありません。説明をしやすくするためです。

● スーパークラスをandroid.view.Viewにしてください。(ここは、重要です)

● これで、作成してください。

Page 67: Programming24 第2回androidアプリ勉強会

SampleViewクラス

● SampleViewメソッドを追記してください。

public SampleView(Context context){

super(context);

setBackgroundColor(Color.WHITE);

}● クラスと同じメソッドをコストラクタと言います。

Page 68: Programming24 第2回androidアプリ勉強会

SampleViewクラス

● onDraw()メソッドをオーバーライドしてください。

@Override

public void onDraw(Canvas canvas){

canvas.drawText("Hello", 100, 100, paint);

}● フィールドに、次の変数を定義してください。

private Paint paint = new Paint();

Page 69: Programming24 第2回androidアプリ勉強会

ビルドと実行

● それでは、再度ビルド、実行してください。

● 「Hello」と表示されたはずです。

● これでは、コンソールと変わらないので、次は、● テキスト表示の部分を図形に変えて見ます。

● canvas.drawText()を削除。

● canvas.drawCircle(100,100,5,paint);を記述。

● 座標(100,100)に円の描画を実施

● 実行して、円が表示されることを確認してください。

Page 70: Programming24 第2回androidアプリ勉強会

描画を拡張

● 円の色を変えてみます。

● canvas.drawCircle()の前に、

paint.setColor(Color.RED);を記述

● 実行して、赤い円が描かれることを確認してください。

*座標の原点は、左上です。

Page 71: Programming24 第2回androidアプリ勉強会

タッチイベントの取得

● onTouchEvent()をオーバーライドしてください

@Override

public boolean onTouchEvent(MotionEvent event)

{

}● ビルドが通ることを確認

Page 72: Programming24 第2回androidアプリ勉強会

タッチイベント動作確認

● タッチイベントの動作確認をします。

onTouchEvent()内に、

Toast.makeText(getContext(), "Touchされました", Toast.LENGTH_SHORT).show();

を記述してください。● 実行してください。タッチするたびに、画面に

「Touchされました」と表示されたと思います。

Page 73: Programming24 第2回androidアプリ勉強会

円がタッチされたら、色を変える

● タッチイベントの判定

public boolean onTouchEvent(MotionEvent event){

int action = event.getAction();

if((action & MotionEvent.ACTION_MASK)

== MotionEvent.ACTION_DOWN){

// タッチされたことを判定

}

}

Page 74: Programming24 第2回androidアプリ勉強会

座標を取得

// タッチされた座標

int ex = (int)event.getX();

int ey = (int)event.getY();

Page 75: Programming24 第2回androidアプリ勉強会

円と点の衝突判定

円(bx,by,R)点(ex,ey)

R:円の半径

● if((bx - ex)*(bx - ex)+(by - ey)*(by - ey) <= R*R){

// 衝突

}

Page 76: Programming24 第2回androidアプリ勉強会

円の色を変える

● colorというフィールドを定義

● color = Color.RED; // Color.BLUE● 円を描く際に

paint.setColor(color);● で色指定すること

● colorをセットしたら、

invalidate();を呼んでおくこと。再描画させるため

Page 77: Programming24 第2回androidアプリ勉強会

タイマーで、円を移動

● MainActivityのフィールドに

private Handler handler = new Handler();

を記述。

● onCreate()でタイマー作成

Page 78: Programming24 第2回androidアプリ勉強会

タイマー作成

Timer timer = new Timer(false);

timer.schedule(new TimerTask(){

public void run(){

handler.post(new Runnable(){

public void run(){

view.invalidate();

}

});

}

},0,30); // 30msec毎に、viewを再描画させる

● このコードが理解できたら、脱初心者です。

● キーワード(抽象クラス、匿名クラス、インタフェース、スレッド間通信)

Page 79: Programming24 第2回androidアプリ勉強会

onDraw()で座標更新

● 左端、右端、上端、下端に来たときの処理を記述。

● 例)左端の処理 bx:円の中心 dx:移動量

(正で右へ、負で左へ移動)

if (bx < 0 ) {

dx = 2;

}

bx = bx + dx; // 座標更新

Page 80: Programming24 第2回androidアプリ勉強会

線と矩形描画

● 線の描画

● canvas.drawLine(x1,y1,x2,y2,paint);● x1,y1 始点座標 x2,y2 終点座標

● 矩形描画

● canvas.drawRect(x1,y1,x2,y2,paint);● x1,y1 左上座標 x2,y2 右下座標

Page 81: Programming24 第2回androidアプリ勉強会

画像描画

● フィールドにビットマップ保存用の変数を定義

● private Bitmap item;● viewのコンストラクタで、ビットマップを読み込む

● Resources res = context.getResources();● item = BitmapFactory.decodeResource(res,

R.drawable.ic_launcher);● onDraw()で描画

● canvas.drawBitmap(item, 100, 200, null);

Page 82: Programming24 第2回androidアプリ勉強会

復習

● ここで、Javaの復習

● 継承、コンストラクタ、オーバーロード、

オーバーライド、superなどの要素が出てきたので、コンソールアプリを使って、ひと通り説明します。

Page 83: Programming24 第2回androidアプリ勉強会

応用

● ここまでの要素を組み合わせれば、ブロック崩し、インベーダー、テトリス、オセロなどが作成可能です。

● 何でも良いので、作ってみましょう。

● 次は、Androidの主要コンポーネントについて

● アプリの作成方法は、レイアウトファイルを主体としたやり方です。

Page 84: Programming24 第2回androidアプリ勉強会

主要コンポーネント

● アプリの主要な機能を実現するためのコンポーネント

● Activity ・・・ ユーザーインターフェース

● Intent  ・・・ コンポーネント間通信

● Content Provider ・・・ データアクセス

● Broadcast Receiver ・・・ イベントトリガー

● Service ・・・ バックグランド実行

*今回の勉強会では、ActivityとIntentを使います。

Page 85: Programming24 第2回androidアプリ勉強会

Activity(アクティビティ)

● 画面の元になるコンポーネント● アクティビティの上にボタン、チェックボックスなどの部品をを配置して画面を作成する

● 基本的に1画面は、1つのアクティビティで構成される。

● アクティビティは、実行中、一時停止などの状態を持つ。(ライフサイクル)

Page 86: Programming24 第2回androidアプリ勉強会

View(ボタン)を配置

● アクティビティにViewを配置する

まず、ボタンを配置してみる

● GUIデザイナで、ボタンを配置

● XMLファイルに書かれる

● コードでは、XMLファイルを指定することで、Viewを指定することができる。

Page 87: Programming24 第2回androidアプリ勉強会

ボタンを使うコード

● コード上でボタンを呼び出す処理

findViewById()● 取得したオブジェクトに設定を行う● イベントを設定

トーストを表示するコード

*トースト、画面上に短い間メッセージを表示する仕組み。警告メッセージなどを表示する場合などに使う。

Page 88: Programming24 第2回androidアプリ勉強会

ログ出力

● コードが複雑になってくると、プログラムが思い通り動いているか、検証したくなります。

● 毎回、デバッガで動かすのも面倒なので、よく使うテクニックとして、気になる箇所にログを仕込みます。

● Log.d("TAG", "message");● ログレベルによって、「v/e/d/w/i」を使い分ける

● ログは、Logcatというツールで見ることができます。

Page 89: Programming24 第2回androidアプリ勉強会

テキストViewを配置

● GUIデザイナで、テキストViewを配置

● ボタンが押されたイベントに、テキストViewに文字を出力するコードを記述

Page 90: Programming24 第2回androidアプリ勉強会

エディットテキストを配置

● GUIデザイナでエディットテキストを配置

● ボタンクリックのイベントでエディットテキストから

文字列を読んで、テキストViewに出力するコードを書いてみる

Page 91: Programming24 第2回androidアプリ勉強会

CheckBoxを配置

● GUIデザイナでCheckBoxを配置する

● ボタンクリックのイベントで、CheckBoxの状態を取得し、状態によって、ダイアログを出し分けるコードを書いてみる。

Page 92: Programming24 第2回androidアプリ勉強会

Activityのライフサイクル

Page 93: Programming24 第2回androidアプリ勉強会

ライフサイクルに関連するメソッド

メソッド名 呼ばれるタイミング

● onCreate() Activityが初めて作られたとき

● onStart() Activityが開始されたとき

● onResume() Activityが表示されたとき

● onRestart() Activityが再度開始されたとき

● onPause() 別のActivityが表示されるとき

● onStop() Activityが表示されなくなったとき

● onDestroy() Activityがメモリから開放される直前

Page 94: Programming24 第2回androidアプリ勉強会

Intent(インテント)

● コンポーネント間通信の仕組み● ここでいうコンポーネントとは、アクティビィティ、

サービス、ブロードキャストレシーバ。● 具体例

アクティビィティ1からアクティビィティ2を起動(画面遷移)

外部アプリのメールソフトを起動、ウェブブラウザを起動など。

Page 95: Programming24 第2回androidアプリ勉強会

Intent(インテント)

● コンポーネント間通信の仕組み● ここでいうコンポーネントとは、アクティビィティ、

サービス、ブロードキャストレシーバ。● 具体例

アクティビィティ1からアクティビィティ2を起動(画面遷移)

外部アプリのメールソフトを起動、ウェブブラウザを起動など。

Page 96: Programming24 第2回androidアプリ勉強会

Intentを試す

● Activityを作って画面遷移

● ブラウザ起動

● Mailアプリ起動(目標アプリの一機能)

Page 97: Programming24 第2回androidアプリ勉強会

画面遷移

● アクティビティを追加して、画面遷移を実現● 新たなアクティビティのクラスを追加

● マニフェストファイル(AndroidManifes.xml)に追記

● メイン画面から、ボタンクリックで画面遷移するようにコードを記述。