SlideShare una empresa de Scribd logo
1 de 26
講義用資料
ABC2015 Summer
いまからはじめるAndroidアプリのつくりかた
有限会社ローグ・インターナショナル
羽山 博
予定・内容
 時間:14:00〜14:45
 内容:Androidアプリのつくりかた
 簡単なおみくじプログラムを例として
 しくみの理解を中心に:×なんとなくできた→○わかっ
た!
アプリのつくりかた、ここがわからん!
 全体像が見えない!
 どこまでがあらかじめ作られているもの?
 あらかじめ作られているものはどう動くの?
 デザインした画面とコードの関係が謎
 おまじないの意味を知りたい!
 参照を取得するってどういうこと?
 イベントリスナーの()や{}が複雑すぎて……
 finalって何?
……などなど。それらの意味やしくみを解きほぐしていきま
しょう!
ともあれ、アプリを作ってみましょう!
 ステップ1:Android Studioの起動から、新規アプリ
の作成まで
 手順はデモンストレーションします
 はじめてアプリを作る人がつまづく謎の箇所について、詳
しく説明します
 分からないところは気にせずにどんどんやればいい
……とよく言われますが、やっぱり気になりますよね
謎その1:プロジェクト作成時の謎
 Company Domainって何?
 Package nameって何?
謎解きその1
 Company Domain
 アプリを一意に識別するための名前
 ドメイン名を使うのがならわし
 Package name
 Javaのプログラム
(クラス)を
まとめておくために
使う
 関連のあるクラスを
ひとまとめにして
おくと便利
(ですよね)
謎その2:アクティビティ作成時の謎
 Activity Nameって何?
 Layout Nameって何?
謎解きその2
 これです!
次は、画面のデザインですね
 ステップ2:画面のデザインに進みましょう
 同様に、手順はデモンストレーション
 謎解きをしながら……
 ウィジェットの配置やプロパティの設定については、それほど謎
はないですね
 ウィジェットはどのようにして識別するの?
 画面のデザインがXMLで記録されているのは分かる
 idを付けて区別するのは分かる
 でも、なんだかモヤモヤする……
謎その3:デザイン時の謎
 実は、整数値が(自動的に)割り当てられています!
 R.idクラスで定義されています
 この整数値を使って、ウィジェットを識別します(詳細はま
た後述)
 ちなみに……画像リソースはR.drawableクラスで整数値が割
り当てられています
謎解きその3
謎その4:コードの謎(アクティビティ)
 Androidアプリってどこから実行されるの
 再び、アクティビティって何?
 インスタンスを作らなくてもいいの?
 アクティビティ(MainActivityクラス)は、ActionBarActivityなど
のクラスを継承したクラス
 親クラスはアプリの画面の基本的な機能を持ったクラス
 それに自分で機能を追加していけばよい
 アプリの実行時に、自動的にインスタンスが作られます
 配置したレイアウトや
ウィジェットも
setContentViewメソッド
により、インスタンス化
されます
 ちなみに、
ActionBarActivityは
古くなったので、今は
AppCompatActivityの
使用が推奨されています
謎解きその4
謎その5:コードの謎(参照)
 参照がよく分からん!
 例えば、乱数を使うときのおまじない
Random r = new Random();
の意味って?
 変数には値型の変数と参照型の変数がある
 値型の変数には値そのものが入れられます(値型はプリミ
ティブ型とも呼ばれます)
 これは分かる。int i;とかでしょ
 参照型の変数にはオブジェクトの参照が入れられます。
 だから、参照って何!
→参照とは、オブジェクトがどこにあるかという情報だと考える
とよい
※ここでは「オブジェクト」と「インスタンス」をほぼ同じ意味で使って
います
 コードを2つに分けて見てみましょう。
Random r; …… ① 参照型の変数rを宣言(Randomクラスのオブ
ジェクトを参照する)
r = new Random(); …… ② Randomクラスのオブジェクトを新
しく作り、その参照をrに代入する
(次のスライドに続く)
謎解きその5
①のコード
Random r;
r
りもこん、
つくった
Randomクラスのオブジェクトを参照
するための変数
②のコードの右辺
new Random();
r オブジェクト
nextIntメソッド
ほんたい、
つくった
Randomクラスで定義されたデー
タや機能を実体化したもの
②のコード全体
r = new Random();
r オブジェクト
nextIntメソッド
ほんたいを、りもこん
に、
むすびつけた
• new演算子は、作成したオブジェクトの参照を返す
• それをrに代入する(データの流れは青い矢印)
• rを使ってオブジェクトが操作できるようになる(参
照の方向は赤い矢印:通常はこの矢印だけを示す)
謎その6:コードの謎(イベントリスナー)
 イベントリスナーってなんであんなに複雑?
Button b = (Button)this.findViewById(R.id.buttonShow);
final ImageView img = (ImageView)this.findViewById(R.id.imageDroid);
final TextView t = (TextView)this.findViewById(R.id.textFortune);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int fortune;
Random r = new Random();
fortune = r.nextInt(2);
if (fortune == 0) {
img.setImageResource(R.drawable.good);
t.setText("大吉");
} else {
img.setImageResource(R.drawable.bad);
t.setText("凶");
}
}
});
 何段階かのコードを1つにまとめてしまったた
め!
 じゃあ、段階を追って見ていけば納得できる? − できま
す!
 setOnClickListenerメソッドには、クリックされたときの処理
を実行するオブジェクトを指定する
 だから、基本は
b.setOnClickListener(obj);
という1行だけ!
 では、objをどうやって作るか? − こうします!
(次のスライドに続く)
謎解きその6
OnClickListenerを実装したクラスを作る
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button)this.findViewById(R.id.buttonShow);
final ImageView img = (ImageView)this.findViewById(R.id.imageDroid);
final TextView t = (TextView)this.findViewById(R.id.textFortune);
listener obj = new listener(); …… listenerクラスのオブジェクトを作る
b.setOnClickListener(obj); …… この2行をまとめる(次のスライド)
}
public class listener implements View.OnClickListener { …… OnClickListenerを実装
@Override
public void onClick(View v) { …… クリックされたときに実行されるメソッド
int fortune;
Random r = new Random();
fortune = r.nextInt(2);
if (fortune == 0) {
img.setImageResource(R.drawable.good);
t.setText("大吉");
} else {
img.setImageResource(R.drawable.bad);
t.setText("凶");
}
}
}
OnClickListenerを実装したクラスを作る
protected void onCreate(Bundle savedInstanceState) {
:
b.setOnClickListener(new listener()); …… objという変数が不要になった
}
public class listener implements View.OnClickListener { …… listenerの部分に埋め込む(次のスライ
ド)
@Override
public void onClick(View v) {
int fortune;
Random r = new Random();
fortune = r.nextInt(2);
if (fortune == 0) {
img.setImageResource(R.drawable.good);
t.setText("大吉");
} else {
img.setImageResource(R.drawable.bad);
t.setText("凶");
}
}
}
匿名クラス(無名クラスにする)
 実際に埋め込むと……
b.setOnClickListener(new View.OnClickListener() { …… listenerというクラス名も不要に
なった
@Override
public void onClick(View v) {
int fortune;
Random r = new Random();
fortune = r.nextInt(2);
if (fortune == 0) {
img.setImageResource(R.drawable.good);
t.setText("大吉");
} else {
img.setImageResource(R.drawable.bad);
t.setText("凶");
}
}
});
謎ファイナル:コードの謎(final)
 finalって何?
Button b = (Button)this.findViewById(R.id.buttonShow);
final ImageView img = (ImageView)this.findViewById(R.id.imageDroid);
final TextView t = (TextView)this.findViewById(R.id.textFortune);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int fortune;
Random r = new Random();
fortune = r.nextInt(2);
if (fortune == 0) {
img.setImageResource(R.drawable.good);
t.setText("大吉");
} else {
img.setImageResource(R.drawable.bad);
t.setText("凶");
}
}
});
謎解きファイナル
 finalとは
 値が変更できないようにする、ということ
 イベントリスナーの中で利用している→ほかの箇所で変
数の値が変更されたり、破棄されたりするのを防ぐ
 imgやtは参照型の変数
→参照を変更できない、ということ
参照先の画像やテキストはもちろん変更できる
まだまだ謎は尽きませんが……
続きはいずれまたの機会に!
お疲れさまでした ……

Más contenido relacionado

Destacado (15)

Meetup #7, Laravel intro, og design/GUI
Meetup #7, Laravel intro, og design/GUIMeetup #7, Laravel intro, og design/GUI
Meetup #7, Laravel intro, og design/GUI
 
Inflation1
Inflation1Inflation1
Inflation1
 
Swot analysis
Swot analysisSwot analysis
Swot analysis
 
Kristiansand php meeting #1
Kristiansand php meeting #1Kristiansand php meeting #1
Kristiansand php meeting #1
 
Responsiv design og Bootstrap 3
Responsiv design og Bootstrap 3Responsiv design og Bootstrap 3
Responsiv design og Bootstrap 3
 
Job evaluation.
Job evaluation.Job evaluation.
Job evaluation.
 
KristiansandPHP meetup 6
KristiansandPHP meetup 6KristiansandPHP meetup 6
KristiansandPHP meetup 6
 
Planning in india
Planning in indiaPlanning in india
Planning in india
 
Laravel Spark, and Twig
Laravel Spark, and TwigLaravel Spark, and Twig
Laravel Spark, and Twig
 
Meetup 9 i KristansandPHP
Meetup 9 i KristansandPHPMeetup 9 i KristansandPHP
Meetup 9 i KristansandPHP
 
Agriculture in india 2
Agriculture  in  india 2Agriculture  in  india 2
Agriculture in india 2
 
Teknik persidangan.ppt
Teknik persidangan.pptTeknik persidangan.ppt
Teknik persidangan.ppt
 
Savings and investment
Savings and investmentSavings and investment
Savings and investment
 
Impact factor of journals
Impact factor of journalsImpact factor of journals
Impact factor of journals
 
Unemployment in india
Unemployment in indiaUnemployment in india
Unemployment in india
 

Similar a 0720 abc seminar

ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいの
manaten
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
 
Unity道場京都スペシャル トゥーンシェーディングとノンフォトリアリスティック風絵づくり入門_
 Unity道場京都スペシャル トゥーンシェーディングとノンフォトリアリスティック風絵づくり入門_ Unity道場京都スペシャル トゥーンシェーディングとノンフォトリアリスティック風絵づくり入門_
Unity道場京都スペシャル トゥーンシェーディングとノンフォトリアリスティック風絵づくり入門_
Unity Technologies Japan K.K.
 
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
Tomonori Ohba
 
Media Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用するMedia Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用する
Atsushi Tadokoro
 

Similar a 0720 abc seminar (19)

Unity2015_No7_~Unity2D~
Unity2015_No7_~Unity2D~Unity2015_No7_~Unity2D~
Unity2015_No7_~Unity2D~
 
ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいの
 
Unity勉強会ハンズオン
Unity勉強会ハンズオンUnity勉強会ハンズオン
Unity勉強会ハンズオン
 
ドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいのドッターのためのプログラミングなにそれおいしいの
ドッターのためのプログラミングなにそれおいしいの
 
HoloLensハンズオン@ももち浜TECHカフェ vol.2
HoloLensハンズオン@ももち浜TECHカフェ vol.2HoloLensハンズオン@ももち浜TECHカフェ vol.2
HoloLensハンズオン@ももち浜TECHカフェ vol.2
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
 
Unity道場京都スペシャル トゥーンシェーディングとノンフォトリアリスティック風絵づくり入門_
 Unity道場京都スペシャル トゥーンシェーディングとノンフォトリアリスティック風絵づくり入門_ Unity道場京都スペシャル トゥーンシェーディングとノンフォトリアリスティック風絵づくり入門_
Unity道場京都スペシャル トゥーンシェーディングとノンフォトリアリスティック風絵づくり入門_
 
【京都勉強会】Android入門編1月31日
【京都勉強会】Android入門編1月31日【京都勉強会】Android入門編1月31日
【京都勉強会】Android入門編1月31日
 
UnityとBlenderハンズオン第1章
UnityとBlenderハンズオン第1章UnityとBlenderハンズオン第1章
UnityとBlenderハンズオン第1章
 
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみたゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
 
Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」
Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」
Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」
 
OSC2011 Androidハンズオン
OSC2011 AndroidハンズオンOSC2011 Androidハンズオン
OSC2011 Androidハンズオン
 
iPhoneアプリ無料勉強会 vol3
iPhoneアプリ無料勉強会 vol3iPhoneアプリ無料勉強会 vol3
iPhoneアプリ無料勉強会 vol3
 
UnityとBlenderハンズオン第8章
UnityとBlenderハンズオン第8章UnityとBlenderハンズオン第8章
UnityとBlenderハンズオン第8章
 
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
 
iPhoneアプリ開発の歩き方〜Swift編〜
iPhoneアプリ開発の歩き方〜Swift編〜iPhoneアプリ開発の歩き方〜Swift編〜
iPhoneアプリ開発の歩き方〜Swift編〜
 
Beginning iPhone Vol2
Beginning iPhone Vol2Beginning iPhone Vol2
Beginning iPhone Vol2
 
MRTK V2.3 Spatial Awareness
MRTK V2.3 Spatial AwarenessMRTK V2.3 Spatial Awareness
MRTK V2.3 Spatial Awareness
 
Media Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用するMedia Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第5回:openFrameworks Addonを使用する
 

0720 abc seminar