はじめてのAndroidアプリ作成

Report
はじめてのAndroidアプリ作成
株式会社コトブキソリューション
丹田 真裕
柳澤 義彦
Androidについて
Androidとは
• Google社が中心となって開発を進めているLinux
ベースの携帯電話向けプラットフォーム
いわゆる“スマートフォン”の代表的なプラットフォーム
3
© KEMCO/KOTOBUKISOLUTION
Androidの特徴
• オープンソース
– 様々なメーカーが対応
• ケータイだけでなく、ネットブックやタブレットなども
• 開発が簡単に始められる
– 開発ツールが無料
– 実機でも容易に実行できる
• アプリ配布が容易
– Android Marketに開発者登録(一度だけ$25を
支払う必要がある)すると、世界中に配布する
ことができる
4
© KEMCO/KOTOBUKISOLUTION
Androidで何ができるか
NFC
(非接触通信)
2D/3Dグラフィックス
GPS/MAP
カメラ
Web
ビデオ/音楽
モーションセンサー
etc…
多くの機能がよりパワフルに、簡単に扱えるようになった
5
© KEMCO/KOTOBUKISOLUTION
開発環境の準備
Androidアプリ作成の流れ
ソースコード作成
(Java)
画像・音楽などの
リソースファイル
AndroidManifest.xml
ビルド
apkファイル(未署名)
署名
apkファイル(署名付き)
7
© KEMCO/KOTOBUKISOLUTION
Androidアプリの開発に必要なツール
• Java Development Kit (JDK)
– Javaアプリケーションを動作させるのに必要
• Android SDK
- Android開発に必要なツールのセット
- 解凍するだけでインストール完了
- Eclipseという統合開発環境が付属しているので、
これ一つで開発可能
最短5分で開発が始められるお手軽さ
8
© KEMCO/KOTOBUKISOLUTION
コマンドライン用のパスの設定
• Android SDKにはコマンドラインで利用する
コマンドが含まれている
– 毎回フルパスを入力するのは面倒・・・
• パスを通して入力を簡単にする
– 例えばデバッグ時に利用するadbコマンド
パスを通す前:
>C:\Program Files\Android\android-sdk\platform-tools\adb.exe
パスを通した後:
>adb
Android SDKのインストール方法とパスの通し
方は付録に記載
9
© KEMCO/KOTOBUKISOLUTION
簡単なプログラミング
Hello Worldアプリ
• 画面に”Hello World”と表示する簡単なプ
ログラムです
– 開発ツールの使い方と併せて説明します
11
© KEMCO/KOTOBUKISOLUTION
Eclipseを起動
標準では英語だが
Pleiades で日本語化可能
12
© KEMCO/KOTOBUKISOLUTION
プロジェクトの作成
①Eclipseのメニューから
「File→New→Project」を選択する。
②「Android→Android Project」を選
択して「Next」
13
© KEMCO/KOTOBUKISOLUTION
プロジェクトの作成
Androidのバージョン
アプリケーション名
プロジェクト名
パッケージ名
(他のアプリと被らない
ようにする)
最低限必要なAPI Level
14
© KEMCO/KOTOBUKISOLUTION
プロジェクトの作成
アプリケーションのアイコン
などの設定
15
© KEMCO/KOTOBUKISOLUTION
パッケージ名
• パッケージ名とは
– Androidアプリを識別するための名前
(同じパッケージ名のアプリは同じアプリ)
– 世界で唯一・ユニークである必要あり
– 一般的にはドメイン名を逆にしてつけます
例 kemco.jpという独自ドメインを持ってる場合
→ jp.kemco.testapp
ドメインを逆にしたもの
アプリの名称
16
© KEMCO/KOTOBUKISOLUTION
ソースコードの追加
①Package Explorerの
「HelloWorld→src」から
パッケージを右クリックし、
ポップアップで
「New→Class」を選択する
②ダイアログでNameに
「HelloView」と入力し、
「Finish」
③ソースコードが作成され
るので、編集していく
ソースコードについては後ほど
説明
17
© KEMCO/KOTOBUKISOLUTION
AndroidManifest.xml
• プロジェクトを作成すると、属性ファイルである「
AndroidManifest.xml」が作成される
• AndroidManifest.xmlには、アプリ名、バージョン
番号、セキュリティ情報などを記載する
18
© KEMCO/KOTOBUKISOLUTION
AndroidManifest.xml
簡易入力のためのUIが
いくつかある
AndroidManifest.xmlが本体
19
© KEMCO/KOTOBUKISOLUTION
• 適当に次へを押して行くだけで
HelloWorldは完成です
さっそく実行してみましょう
20
© KEMCO/KOTOBUKISOLUTION
Android Virtual Device(AVD)の追加
• デバッグで使用するエミュレータの設定を追加する
– Eclipseから「Windows→AVD Manager」を選択
21
© KEMCO/KOTOBUKISOLUTION
AVDの設定
設定名
Androidのバージョン
画面サイズ
詳細設定
22
© KEMCO/KOTOBUKISOLUTION
AVDの起動
23
© KEMCO/KOTOBUKISOLUTION
AVDの起動
Ctrl + F12で画面の向きを
切り替え
24
© KEMCO/KOTOBUKISOLUTION
エミュレーターでの実行
① Eclipseのメニューから「Run→Debug Configurations」を選択
② 「Android Application」を選択
25
© KEMCO/KOTOBUKISOLUTION
実行設定
「New launch configuration」を押す
実行設定名
プロジェクト名
「New_configuration」を追加
26
© KEMCO/KOTOBUKISOLUTION
デバッグの開始
マニュアルに設定
デバッグ開始
27
© KEMCO/KOTOBUKISOLUTION
デバッグする端末の選択
さっき起動したエミュレータを選択
28
© KEMCO/KOTOBUKISOLUTION
実行結果
29
© KEMCO/KOTOBUKISOLUTION
エミュレータで注意すること
一度起動したら、そのまま起動しておこう
エミュレータの起動には時間がかかる
画面サイズが大きいとかなり動作が重い
大きい画面にする必要性がなければ、HVGA(
320x480)で開発を試すのもアリ
最新のintelPCを利用しているならHAXMを
利用することで、高速に動作します
(インストール方法は付録に記載)
30
© KEMCO/KOTOBUKISOLUTION
エミュレータが遅いと感じたら
19800円から購入可能
31
© KEMCO/KOTOBUKISOLUTION
ソースコード解説
HelloWorld.java
package keitaiaward.sample.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
パッケージ宣言
利用するクラスの指定
public class HelloWorld extends Activity {
Activityクラスの継承
/** Called when the activity is first created. */
//アプリの初期化
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
起動時に呼ばれる
setContentView(new HelloView(this));
}
}
32
© KEMCO/KOTOBUKISOLUTION
Activityについて
• 「アクティビティ」はAndroidアプリの基本的な構成
要素-WindowsアプリだとWindowに対応
• ユーザーインターフェースの提供やイベントの処
理など、ユーザーとアプリのやりとりを仲介する
役目
• 1つの画面に対して1つのアクティビティが対応づ
けられる
– 1つのアプリに複数のアクティビティが入ることも
• 他のアプリのアクティビティを利用することも可能
33
© KEMCO/KOTOBUKISOLUTION
各関数について
Activityクラス:
void onCreate( Bundle savedInstanceState )
アプリ起動時に呼ばれる関数。savedInstanceStateは
onCreate()呼び出し時に渡されるデータ。
onCreate()では、
super.onCreate(savedInstanceState);
のように、必ずスーパークラス(親クラス)のonCreate()を呼び出す必
要がある。
34
© KEMCO/KOTOBUKISOLUTION
各関数について
Activityクラス:
void requestWindowFeature( int featureID )
ウィンドウの特徴IDの指定をする。
Window.FEATURE_NO_TITLEはウィンドウを「タイトルなし」に
設定する。
35
© KEMCO/KOTOBUKISOLUTION
各関数について
Activityクラス:
void setContentView( View view )
実画面に表示するビューを指定する。
表示するもの
ビュー1
setContentView()
ビュー2
実画面
表示するものを
指定
ビュー1
ビュー3
36
© KEMCO/KOTOBUKISOLUTION
HelloViewクラス
HelloView.java
package keitaiaward.sample.helloworld;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class HelloView extends View {
//コンストラクタ
public HelloView(Context context) {
super(context);
setBackgroundColor(Color.WHITE);
}
インスタンス化する時に呼び出す
//描画
@Override
protected void onDraw(Canvas canvas) {
canvas.drawText("Hello World!", 0, 12, new Paint());
}
描画の実行
}
37
© KEMCO/KOTOBUKISOLUTION
Viewクラスについて
Viewクラス
画面表示の機能をもつもの(以下、ビューと呼ぶ)の、土台と
なる基本的なクラス。ビューとなるクラスはこのクラスを継承
する。
RadioButton
EditText
画面を構成
するものをま
とめてViewと
呼ぶ
Button
38
© KEMCO/KOTOBUKISOLUTION
Viewのコンストラクタ
Viewクラス:
View( Context context )
Viewクラスのコンストラクタには、アプリケーション環境の情報
を保持するContextオブジェクトを渡す必要がある。
Activityクラスは、Contextクラスも継承しているので、引数と
してActivity自身である(this)を渡すことが出来る。
HelloWorldクラス:
setContentView(new HelloView(this));
Viewクラス:
void setBackgroundColor( int color )
colorで指定した、背景色に指定する
色の例
指定する定数
色
Color.BLACK
黒
Color.BLUE
青
Color.CYAN
シアン
39
© KEMCO/KOTOBUKISOLUTION
画面への描画
Viewクラス:
void onDraw( Canvas canvas )
onDraw()はアプリ起動時や再描画が必要な時に呼び出され
る。引数のCanvasクラスのオブジェクトを操作することで、画
面に文字列や画像を表示できる。
40
© KEMCO/KOTOBUKISOLUTION
Canvasクラス
Canvasクラス
画面に文字列や画像を表示するためのクラス。文字列表示
や画像表示のメソッドを持つ
Canvasクラス:
void drawText ( String text, int x, int y, Paint paint )
指定したXY座標に文字列を描画する。x, yはそれぞれ原点
( 0, 0 )から何ドット移動したのかを示す。
指定したXY座標は文字列の左上でなく、ベースラインの左端
の座標になる。
x
y
Hello World!
ベースライン
41
© KEMCO/KOTOBUKISOLUTION
実機での実行
Android端末での実行方法
• Android端末で実行する場合、基本的にはPCと
USB接続をしてインストールします
• Android端末の接続準備
– メニュー→設定→アプリケーション→開発を選択し、
USBデバッグにチェックをする
ドライバインストール前に
設定しておかないと、失
敗することも!
43
© KEMCO/KOTOBUKISOLUTION
ドライバのインストール
• Android端末をUSBでPCに接続し
ドライバをインストールする
• デバッグ用ドライバ(ADB)は各メーカーが出してい
る
• Android SDKに含まれているドライバでインストー
ル出来る場合もある
• Macでは大体の端末でドライバは不要
44
© KEMCO/KOTOBUKISOLUTION
Android端末での実行方法
• コマンドプロンプトで「adb devices」と入力し、端
末一覧を表示
– 接続されているかどうか確認
>adb devices
List of devices attached
355663040669216 device
45
© KEMCO/KOTOBUKISOLUTION
端末を選択して実行
エミュレーターと同じように実行すると、
接続した端末が出てくる
46
© KEMCO/KOTOBUKISOLUTION
実機に接続できないときは?
・USBデバッグにチェックを入れた?
・デバイスマネージャで端末は認識してる?
(黄色い!マークはドライバが入ってません)
・ベンダーIDの登録が必要なことも
/Documents and Settings/自分の名前
/.androidフォルダのadb_usb.ini
富士通なら0x054C ソニーなら0x04C5など
47
© KEMCO/KOTOBUKISOLUTION
署名付きapkファイルの作成
• Androidアプリは必ず署名を行う必要がある
APKとはAndroidアプリの形式で
EXEみたいなもの
署名とはアプリの製作者が
だれか証明するもの
48
© KEMCO/KOTOBUKISOLUTION
署名付きapkファイルの作成
• Package Explorerでプロジェクトを右クリックし、Android
Tools→Export Signed Application Package
またはAndroidManifest.xmlの
ここをクリック
49
© KEMCO/KOTOBUKISOLUTION
署名付きapkファイルの作成
プロジェクト名
50
© KEMCO/KOTOBUKISOLUTION
署名付きapkファイルの作成
51
© KEMCO/KOTOBUKISOLUTION
署名付きapkファイルの作成
新しいキーストアの作成
保存先の指定
パスワード
52
© KEMCO/KOTOBUKISOLUTION
署名付きapkファイルの作成
署名の別名
パスワード
使用期限(25以上指定)
作者名
部署名
組織名
都市名
都道府県名
国番号(日本はjp)
53
© KEMCO/KOTOBUKISOLUTION
署名付きapkファイルの作成
apkの保存先の指定
54
© KEMCO/KOTOBUKISOLUTION
apkファイルのインストール
• 以下のコマンドでapkをインストールする
adb –s 端末ID install apkファイル名
• 端末・エミュレーターが1個しか起動していない場
合は下記のように省略してもよい
adb install apkファイル名
55
© KEMCO/KOTOBUKISOLUTION
apkファイルのインストール
インストールされると
他のアプリと同じく実行できる
56
© KEMCO/KOTOBUKISOLUTION
プログラミングサンプル
パーミッションについて
• Androidではセキュリティのため
「パーミッション」がないと利用できない機
能がある。
・ パーミッションを利用するには、
Android.manifestファイルにパーミッション
を記述する
例:インターネットに接続する
<uses-permission android:name="android.permission.INTERNET" />
GPSを利用する
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"/>
58
© KEMCO/KOTOBUKISOLUTION
各種センサーを使う
Androidの特徴として、各種センサーを搭載しており、簡単に扱える
NFC
加速度センサー
GPS
ジャイロセンサー
温度センサー
近接センサー
気圧センサー
地磁気センサー
明るさセンサー
※端末によって搭載するセンサーに違いあり
59
© KEMCO/KOTOBUKISOLUTION
Androidで扱えるセンサーの種類
種類
扱うデータ
加速度センサー
端末の加速度
重力センサー
端末の重力加速度(重力のみ含む)
線形加速度センサー
端末の線形加速度(重力を含まない)
ジャイロセンサー
端末の回転速度
磁気センサー
磁気の強さ
近接センサー
端末の近くに物があるか
照度センサー
明るさ
温度センサー
温度
湿度センサー
湿度
気圧センサー
気圧
など
60
© KEMCO/KOTOBUKISOLUTION
Android端末のセンサーの搭載状況
加速度
重力
ジャイロ
照度
気圧
SC-04D
○
○
○
○
○
T-01C
○
×
×
○
×
SO-02D
○
○
○
×
×
F-02E
○
○
○
○
×
Kindle Fire
○
○
×
×
×
端末によって、搭載するセンサーにはばらつきがある
61
© KEMCO/KOTOBUKISOLUTION
照度センサーの利用
今回は照度センサーを利用してみます
パーミッションは特に必要ありません
62
© KEMCO/KOTOBUKISOLUTION
画面のデザイン
Androidの開発環境には、画面の見た目を簡
単に作成できるGUIエディタが付属しています
Layoutフォルダにあるxml
ファイルをダブルクリック
して開く
63
© KEMCO/KOTOBUKISOLUTION
GUIデザイナによる画面デザイン
ボタンやプログレ
スバーなどさまざ
まなView部品が
利用可能。
ドラッグアンド
ドロップで配置
64
© KEMCO/KOTOBUKISOLUTION
Viewに名前をつける
設置したView部品にはプログラム
から利用できるように”Edit ID”で
名前をつける
65
© KEMCO/KOTOBUKISOLUTION
SensorManager
• onCreate()内
インスタンス変数
private SensorManager manager;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
manager =
(SensorManager)getSystemService(SENSOR_SERVICE);
}
SensorManager
SensorManagerというセンサーを扱うためのクラスを作る
66
© KEMCO/KOTOBUKISOLUTION
センサーの値が変化したことを検出
• public class MainActivity extends Activity
{
↓
• public class MainSample extends Activity
implements SensorListener {
SensorListenerインター
フェースを実装する
67
© KEMCO/KOTOBUKISOLUTION
センサーの値が変化したことを検出
protected void onResume() {
super.onResume();
// Listenerの登録
明るさセンサーがあるか確認
List<Sensor> sensors =
manager.getSensorList(Sensor.TYPE_LIGHT);
if(sensors.size() > 0) {
Sensor s = sensors.get(0);
manager.registerListener(this, s,
sensorManager.SENSOR_DELAY_UI);
}
あった場合は、センサーの値の変更
}
を検出するリスナーを登録
68
© KEMCO/KOTOBUKISOLUTION
センサーの検出を停止
protected void onStop() {
super.onStop();
// Listenerの登録解除
manager.unregisterListener(this);
}
アプリの停止時にセン
サーの取得も停止
69
© KEMCO/KOTOBUKISOLUTION
センサーの値を取得
この名前のメソッドがセ
ンサーの値が変わるた
public void onSensorChanged(SensorEvent event) {
び呼ばれる
String str = "";
if(event.sensor.getType() == Sensor.TYPE_LIGHT) {
ProgressBar bar = (ProgressBar)
this.findViewById(R.id.progressBar1); 設置したプログレス
R.id.(先ほど
バーの値を、明るさ
EditIDで入力し bar.setMax(1000);
によって変えてみる
た名前)で取
bar.setProgress((int)event.values[0]);
得できる
TextView text = (TextView) findViewById(R.id.textView1);
text.setText((int)event.values[0]);
}
}
センサーの値
(単位:Lux)
が入っている
70
© KEMCO/KOTOBUKISOLUTION
実行結果
※なお、明るさセンサーはタブ
レット等一部の端末には搭載
されておらず、また精度にも
端末によるばらつきがある
71
© KEMCO/KOTOBUKISOLUTION
他のセンサーも簡単に扱えます
onSensorChanged()内を書き換えます
• Sensor.TYPE_LIGHT
→ Sensor.TYPE_LINEAR_ACCELERATION
※詳しくは配布サンプル(MotionSample)をご
覧ください
72
© KEMCO/KOTOBUKISOLUTION
プログラミングサンプル
ー描画ー
文字列・図形・画像の描画
• 文字列の描画に加えて、図形と画像の描画を行
います。
• ソースコードは「ViewSample」「DrawView.java」を
参照して下さい。
74
© KEMCO/KOTOBUKISOLUTION
Viewクラスの継承
• 画面に表示するためViewクラスを継承
Viewを継承する
public class DrawView extends View {
public DrawView(Context context) {
}
}
コンストラクタ
75
© KEMCO/KOTOBUKISOLUTION
描画を行う関数
Viewクラス:
void onDraw( Canvas canvas)
描画を行う関数。この関数内に必要な描画処理を記述する
protected void onDraw(Canvas canvas) {
canvas.drawText("ケータイあわ~ど",
30, 100);
super.onDraw(canvas);
}
76
© KEMCO/KOTOBUKISOLUTION
文字を描画する関数
Canvasクラス:
Void drawText( String text,float x,float y,Paint)
指定した座標に文字を描画する。描画する座標は文字の
ベースラインの座標になる
指定する座標はおよそ図の★の位置
思ったより上に描画されるので注意
77
© KEMCO/KOTOBUKISOLUTION
図形を描画する関数
Canvasクラス:
void drawRect (left, top, right, bottom, Paint )
指定した座標に長方形を描画する
Canvasクラス:
void drawCircle (cx, cy ,radius, Paint )
指定した座標を中心にradiusで指定した半径の円を描画する
他にも、直線を引く命令や円弧を描く命令などあります
78
© KEMCO/KOTOBUKISOLUTION
画像の設置
drawable-nodpiフォルダを作成
(画面サイズに依存せずに画像を利用)
使用する画像
(PNG推奨。GIFやJPEGも一応使える。)
79
© KEMCO/KOTOBUKISOLUTION
画像を描画する関数
BitmapFactoryクラス:
Bitmap decodeResource(getResources(), int resid);
画像をロードし、プログラムで扱えるようにメモリ上に設置す
る
this.bitmap =
BitmapFactory.decodeResource(getResources(),
R.drawable.robot);
robot.pngという
画像を指定
drawable-nodpiなどというフォルダに先ほど設
置した画像にはIDが割り振られ、R.drawable.
画像名という形式で指定できる
80
© KEMCO/KOTOBUKISOLUTION
描画を行う関数
Canvasクラス:
void drawBitmap( Bitmap b, float x,float y)
読み込み済みのBitmapをcanvasに描画する関数
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(bitmap,100, 200);
super.onDraw(canvas);
}
81
© KEMCO/KOTOBUKISOLUTION
画像を使う場合の注意点
• 画像を使う場合は、画像が必要なくなった
タイミングでrecycle()命令を呼んでメモリを
解放する必要がある
• もしくは、BitmapFactoryで読み込むときに
inPurgeableオプションをつけて読み込むと
必要なくなったタイミングで自動解放される
忘れると、画面を何度か回転させただけでメモリ不足でアプリ終了
82
© KEMCO/KOTOBUKISOLUTION
実行結果
83
© KEMCO/KOTOBUKISOLUTION
Androidにはいろんな画面サイズが
• Androidにはいろんな解像度・画面サイズ
があります
320x480の端末で作ると
高解像度端末で
は文字が小さい
320x480
1080x1920
84
© KEMCO/KOTOBUKISOLUTION
画素密度に合わせて拡大
Resourceクラス:
getDisplayMetrics().density
画素密度(どのくらい画素数が高いか)を得る
• 画素密度が高いほど文字が大きくなるよう
にする
scale = getResources().getDisplayMetrics().density
paint.setTextSize(30 * scale);
Scaleは解像度と画面サイズで決まる
85
© KEMCO/KOTOBUKISOLUTION
Paintクラス
Paintクラス
図形や文字を描画する機能をもつクラス。色や幅、塗りつぶ
し方などを指定することができる。
86
© KEMCO/KOTOBUKISOLUTION
文字列表示部分の各機能
Paintクラス:
void setAntiAlias( boolean antiAlias )
アンチエイリアス(文字やラインを滑らかに見せる処理)の有
効無効の指定をする
Paintクラス:
void setTextSize(float textSize)
文字サイズを指定する
Paintクラス:
void setColor( int color )
色の指定をする
87
© KEMCO/KOTOBUKISOLUTION
図形の描画部分の各機能
Paintクラス:
void setStrokeWidth( float width )
ライン幅の指定をする
Paintクラス:
void setStyle( Paint.Style style )
描画スタイルの指定
定数
スタイル
Paint.Style.FILL
塗りつぶし
Paint.Style.FILL_AND_STROKE
塗りつぶし+ライン
Paint.Style.STROKE
ライン
88
© KEMCO/KOTOBUKISOLUTION
タッチイベント
• タッチイベントの処理、タッチ座標の取得を行う簡
単なサンプルプログラムを紹介します
• ソースコードは「SingleTouchSample.java」「
SingleTouchView.java」を参照。
89
© KEMCO/KOTOBUKISOLUTION
タッチの取得方法
Activityクラス:
onTouchEvent(MotionEvent event)
Activityのメソッドで、これをオーバーライドすることで
タッチイベントが取得できる
90
© KEMCO/KOTOBUKISOLUTION
MainActivity.java
// タッチイベント発生時に呼び出される
public boolean onTouchEvent(MotionEvent event) {
タッチイベント
// タッチ座標を取得
int x = (int)event.getX();
int y = (int)event.getY();
タッチ座標取得
// SingleTouchViewにタッチイベントをセット
singleTouchView.setTouchXY(x, y);
:
:
:
91
© KEMCO/KOTOBUKISOLUTION
MainActivityjava
// イベントの種類で条件分岐し、singleTouchViewにイベントの種類をセット
switch (event.getAction()) {
// タッチされた瞬間を表すイベント
case MotionEvent.ACTION_DOWN:
singleTouchView.setTouchState("Down");
break;
// 指が離された瞬間を表すイベント
イベントの種類で分岐
case MotionEvent.ACTION_UP:
singleTouchView.setTouchState("Up");
break;
// タッチされた指がスライドされたことを表すイベント
case MotionEvent.ACTION_MOVE:
singleTouchView.setTouchState("Move");
break;
}
// singleTouchViewの再描画を行う
singleTouchView.invalidate();
ビューの再描画
return true;
}
}
92
© KEMCO/KOTOBUKISOLUTION
SingleTouchView.java
// 描画のためにシステムから呼び出される
protected void onDraw(Canvas canvas) {
// 描画オブジェクトの生成
Paint paint = new Paint();
// アンチエイリアスを有効に
paint.setAntiAlias(true);
// 文字サイズをセット
paint.setTextSize(32.0f);
// 文字色を黒色にセット
paint.setColor(Color.rgb(0, 0, 0));
// 文字列を描画
canvas.drawText("TouchState:" + touchState, 8, 40, paint);
canvas.drawText("(" + touchX + ", " + touchY + ")", 8, 80, paint);
タッチ座標の描画、
イベントの種類の描画
タッチしたところに画像
を描画
// イメージの描画
canvas.drawBitmap(image, touchX - 60, touchY - 60, null);
}
93
© KEMCO/KOTOBUKISOLUTION
SingleTouchView.java
// 座標値をセット
public void setTouchXY(int x, int y) {
touchX = x;
touchY = y;
}
// タッチ状態を表す文字列をセット
public void setTouchState(String state) {
touchState = state;
}
タッチの座標値をセット
イベントの種類を示す文
字列をセット
}
94
© KEMCO/KOTOBUKISOLUTION
実行結果
95
© KEMCO/KOTOBUKISOLUTION
タッチイベントの処理
Viewクラス:
boolean onTouchEvent( MotionEvent event )
タッチイベント発生時に呼び出される。eventにタッチイベント
の情報が格納されている。
MotionEventクラス:
float getX()
タッチイベントのX座標の取得
MotionEventクラス:
float getY()
タッチイベントのY座標の取得
96
© KEMCO/KOTOBUKISOLUTION
タッチイベントの処理
MotionEventクラス:
int getAction()
タッチイベントのアクション種別を取得する
定数
内容
MotionEvent.ACTION_CANCEL
キャンセル
MotionEvent.ACTION_DOWN
ダウン
MotionEvent.ACTION_MOVE
ムーブ
MotionEvent.ACTION_UP
アップ
97
© KEMCO/KOTOBUKISOLUTION
再描画関数
Viewクラス:
void invalidate()
画面の再描画を行う。この関数はViewが無効化されるように
要求をし、Androidが必要に応じてonDraw()を呼び出すのを促
している。
98
© KEMCO/KOTOBUKISOLUTION
もっと知りたい人は
99
© KEMCO/KOTOBUKISOLUTION
さらにもっと
日本Androidの会
Androidに興味を持つ人が集まるユーザーコミュニティ
たぶん国内のコミュニティでは最大級
フォーラムに質問したり、勉強会に参加すると
いいかも。
100
© KEMCO/KOTOBUKISOLUTION
今回のソースコード・配布資料はこちら
• Dropboxにて配布中
→ http://bit.ly/keitaiaward2013
(短縮前のアドレス
https://www.dropbox.com/sh/8k4kc24t1xpo
4c1/9d8tYpe46j)
101
© KEMCO/KOTOBUKISOLUTION
付録
付録
• Android SDKのインストール方法
• パスの通し方
• DDMS
103
© KEMCO/KOTOBUKISOLUTION
ツールのインストール
• Java Development Kit (JDK)
ダウンロードページ:
http://java.sun.com/javase/ja/6/download.html
インストーラーに従ってインストールをする
• Eclipse
ダウンロードページ:
http://www.eclipse.org/downloads/
解凍後、適当なフォルダに設置する
104
© KEMCO/KOTOBUKISOLUTION
ADTのインストール方法(最新版では不要)
• メニューから「Help→Install New Software」を選択する。
Addボタンを
押す
追加インストールダイアログ
105
© KEMCO/KOTOBUKISOLUTION
ADTのインストール方法
• Nameに「Android plug-in」、Locationに「https://dlssl.google.com/android/eclipse/」を入力して「OK」を押す
106
© KEMCO/KOTOBUKISOLUTION
ADTのインストール方法
•
Work withで「Android plug-in」を選択し、ツリーの「Developer Tools」
をチェックして、「Next」ボタンを押す。
107
© KEMCO/KOTOBUKISOLUTION
ADTのインストール方法
•
指定したプラグインを確認する画面が表示されるので、「Next」ボタン
を押す
108
© KEMCO/KOTOBUKISOLUTION
ADTのインストール方法
•
•
ライセンスを読み、「I accept」を選択し、「Finish」ボタンを押す。
再起動を促されたら、Eclipseを再起動する
109
© KEMCO/KOTOBUKISOLUTION
Android SDKのインストール
• Android SDKのダウンロード
http://developer.android.com/intl/ja/sdk/index.html
• Android SDKのZIPファイルを解凍して、適当なフ
ォルダに配置する
• Eclipesを起動して、「Window→Preferences」(
Macの場合は「Eclipse→Preferences」)を選択
110
© KEMCO/KOTOBUKISOLUTION
Android SDKのインストール
•
PreferenceのツリーのAndroidを選択。SDK LocationにAndroid SDK
のルートフォルダを指定し、「OK」ボタンを押す。
111
© KEMCO/KOTOBUKISOLUTION
パスの通し方(Windowsの場合)
• スタート→コントロールパネル→システムを選択
• 「システムの詳細設定」をクリックする
• 「環境変数」ボタンを押し、環境変数ダイアログを開く
112
© KEMCO/KOTOBUKISOLUTION
パスの通し方(Windowsの場合)
•
•
「システム環境変数」に既に「PATH」が存在していたら「編集」ボタン
、存在していなかったら「新規」ボタンを押す
環境変数の編集ダイアログに表示されるパスの最後を「;」で区切り
、「tools」の場所を追加する(例C:\Android\android-sdk\tools)。「
adb.exe」は「platform-tools」に入っていたりもするので、必要な場所
をバージョンに応じて追加する。
注意:間違えると
OSが壊れます
113
© KEMCO/KOTOBUKISOLUTION
DDMS
• Android SDKにはDDMSというデバッグツールが付属して
いる
• Eclipseで起動する場合は「Window→Open
Perspective→DDMS」を選択
• パスが通っていればコマンドライン「ddms」で呼び出すこ
ともできる
• ログやヒープメモリの使用量など、各種デバッグ情報を見
ることができるほか、スクリーンキャプチャなども行える
114
© KEMCO/KOTOBUKISOLUTION
DDMS
115
© KEMCO/KOTOBUKISOLUTION
エミュレータを高速化するHAXMの使用方法
• 注意:使用できるのはIntel CPUのみ
(Intel VTに対応したCPUが必須です)
116
© KEMCO/KOTOBUKISOLUTION
HAXMのインストール方法
SDKマネージャーで「Intel x86 Atom
System Image」「HAXM」をインストール
117
© KEMCO/KOTOBUKISOLUTION
HAXMの使用方法
• AndroidSDKのフォルダのextras/intel/
Hardware_Accelerated_Execution_Manager
/ IntelHaxm.exeをインストール
• 新規で仮想デバイス(AVD)を作成、この時
CPU/ABIにIntel Atom(x86)を選ぶ
これだけで高速に動作!
118
© KEMCO/KOTOBUKISOLUTION
参考文献
• 布留川英一(2010)『Android2.1 プログラミングバイブル』
ソシム株式会社
• 安生真、柴田文彦、藤枝崇文(2010)『初歩からわかる
Android最新プログラミング』株式会社インプレスジャパン
119
© KEMCO/KOTOBUKISOLUTION
Androidを構成する基本的なコンポーネント
Context
View
Application
アプリケーションそのものを指す
Activity
アプリケーションのうち、画面一つ分
WindowsアプリでいえばWindowの強化版
Service
画面を持たずバックグラウンドで動作
する
TextView
SurfaceView
FrameLayout
Activity(画面)
に表示できる
コンポーネント
のこと
AnalogClock
など多数
120
© KEMCO/KOTOBUKISOLUTION
Intentとは
IntentとはActivity同士の橋渡しをするもの
タイトル画面Activity
オプション画面を起動
オプション画面Activity
戻るキー
戻る(Back)キーで前の
Activityへ
IntentでActivityを呼び出す
121
© KEMCO/KOTOBUKISOLUTION
暗黙的Intent
Intentの特徴として暗黙的Intentがある
ブラウザが開きたい!
Intent i = new Intent(Intent.ACTION_VIEW,uri);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
どのアプリが入ってるか
わからなくても、Intentを
投げれば処理できるアプ
リが反応してくれる
122
© KEMCO/KOTOBUKISOLUTION
大人になったらわかること
• Androidで今はわからなくても将来役に立
つことまとめ。
static変数は使っちゃだめです
weakReferrenceをうまく使って下さい
使えるメモリは限られているのでメモリ管
理は大事です
どんな解像度(極端な話100x1024とかでも)
動くアプリを目指してください
マルチスレッドを意識してください
123
© KEMCO/KOTOBUKISOLUTION

similar documents