Slide 1

Slide 1 text

Androidのはなし るーく@RooandQoo

Slide 2

Slide 2 text

About me 佐々木 佳祐@るーく 社歴2(4)年目 アプリ@マンガプロジェクト インターネットで二児の父をしています

Slide 3

Slide 3 text

pixiv マンガ

Slide 4

Slide 4 text

pixiv マンガ ・(ほぼ)毎日届く編集部のオススメマンガ ・読みやすい縦読みビューワー ・pixivコミックの連載も読めちゃう ・無料!!!!!!!!!!!!

Slide 5

Slide 5 text

pixiv マンガ Android / iOS

Slide 6

Slide 6 text

pixiv マンガ このアプリを つくる上での テクニックとかを 紹介していきます

Slide 7

Slide 7 text

º iOSのみなさんゴメンナサイ…。

Slide 8

Slide 8 text

Activityはなるべくスリムにする

Slide 9

Slide 9 text

画面を構成する基本要素 Activity Fragment (Custom)View

Slide 10

Slide 10 text

Activity

Slide 11

Slide 11 text

Fragment

Slide 12

Slide 12 text

Fragment

Slide 13

Slide 13 text

(Custom)View

Slide 14

Slide 14 text

(Custom)View

Slide 15

Slide 15 text

(Custom)View

Slide 16

Slide 16 text

その気になればActivity1つでなんでもできる

Slide 17

Slide 17 text

その気になればActivity1つでなんでもできる なんでもは言いすぎたかも

Slide 18

Slide 18 text

値の処理 バリデーション アニメーション ネットワーク処理 DB操作 メニュー 画面回転の対応 Intentの処理 Fragment管理 KeyEvent 戻るボタン テーマの設定 他の画面から呼び出される etcetc…

Slide 19

Slide 19 text

全部やらせたら当然太る

Slide 20

Slide 20 text

肥大化したクラスはメンテしたくない

Slide 21

Slide 21 text

Activity, Fragment, View 得意分野がそれぞれ異なるので 任せることが大事

Slide 22

Slide 22 text

特にActivityは Activityにしかできないことを やらせる方が良い

Slide 23

Slide 23 text

値の処理 バリデーション アニメーション ネットワーク処理 DB操作 メニュー 画面回転の対応 Intentの処理 Fragment管理 KeyEvent 戻るボタン テーマの設定 他の画面から呼び出される etcetc…

Slide 24

Slide 24 text

メニュー Intentの処理 Fragment管理 テーマの設定 他の画面から呼び出される

Slide 25

Slide 25 text

FragmentとViewは 何をすべきか?

Slide 26

Slide 26 text

・Viewの集合をユーザに見せる Fragment 定義されたレイアウトを表示する 画面を切り替える

Slide 27

Slide 27 text

・ライフサイクルに応じた処理 Fragment Activityにくっついた、離れた Viewが生まれた、死んだ 画面が回転された

Slide 28

Slide 28 text

・ネットワーク処理 Fragment リクエストを投げる 結果を受け取って何かする

Slide 29

Slide 29 text

・DB, ファイルの操作 Fragment

Slide 30

Slide 30 text

・画面パーツとして利用する (Custom)View パーツにユーザが操作を加えたとき なんらかの値が変わる場合 CustomViewが処理する

Slide 31

Slide 31 text

CustomViewの使用例

Slide 32

Slide 32 text

pixivマンガのトップ

Slide 33

Slide 33 text

CustomView

Slide 34

Slide 34 text

CustomView ここが 変わる

Slide 35

Slide 35 text

CustomView ちなみに これも CustomView

Slide 36

Slide 36 text

Activity(この場合はFragment)でもできる 1. GridViewとTextViewをFragment内で定義 2. ジャンル一覧のGridViewにListenerを設定 3. Listener内のonItemSelectedでTextViewの中身を更新

Slide 37

Slide 37 text

処理をViewに譲渡することで 見通しがよくなる Fragmentから GenreLabelView.setGenreTextView(“ジャンル名”) を呼ぶだけ!!

Slide 38

Slide 38 text

CustomViewのつくりかた 1. CustomViewとして使うもののレイアウトファイルをつくる 2. なんちゃらLayoutを継承したクラスをつくる 3. コンストラクタを書く 4. あるActivity(Fragment)のレイアウトに埋め込む 5. または、使いたい場面で直接インスタンスを作って使う

Slide 39

Slide 39 text

レイアウト埋め込み型

Slide 40

Slide 40 text

インスタンスつくる型

Slide 41

Slide 41 text

たのしいCustomViewライフを!!

Slide 42

Slide 42 text

Fragmentは闇が深い

Slide 43

Slide 43 text

Fragmentは人類には早すぎたんや… @choco_biimu

Slide 44

Slide 44 text

とはいえ使わないわけにもいかない

Slide 45

Slide 45 text

用法・用量を守ろう 1. コンストラクタのつくりかたを守る 2. 初期値の設定はset/getArguments()で 3. startActivityはあんましないほうが良い 4. 特にstartActivityForResult()は怪しい 5. などなど ググるといい感じの資料が出てくる

Slide 46

Slide 46 text

用法・用量を守ろう 1. コンストラクタのつくりかたを守る 2. 初期値の設定はset/getArguments()で 3. startActivityはあんましないほうが良い 4. 特にstartActivityForResult()は怪しい 5. などなど というかこの資料もリファレンスがあるので あとで教えます

Slide 47

Slide 47 text

細かいこといろいろ

Slide 48

Slide 48 text

画面遷移はcreateIntent()で! Activity1 Activity2

Slide 49

Slide 49 text

よくあるパターン Activity1.startActivity(this, Activity2.class)

Slide 50

Slide 50 text

よくあるパターン Intent intent = new Intent(this, Activity2.class) intent.putExtra(“hoge”, 1) startActivity(intent) 遷移先のことを常に意識しないといけない

Slide 51

Slide 51 text

createIntent public static Intent createIntent(Activity fromactivity) { Intent intent = new Intent(fromActivity, Activity2.class); return intent; } 呼び出される側(Activity2)

Slide 52

Slide 52 text

createIntent startActivity(Activity2.createIntent(this)) 呼び出す側(Activity1)

Slide 53

Slide 53 text

createIntent public static Intent createIntent(Activity fromactivity, int a) { Intent intent = new Intent(fromActivity, Activity2.class); intent.putExtra(“hoge”, a) return intent; } 値を渡したいとき

Slide 54

Slide 54 text

createIntent startActivity(Activity2.createIntent(this, 1)) 値を渡したいとき キーの名前を意識しなくて済む

Slide 55

Slide 55 text

List(Grid)Viewを使うときは ViewHolderを実装する スクロール した時に Viewを 使いまわす

Slide 56

Slide 56 text

List(Grid)Viewを使うときは ViewHolderを実装する DataBindingで 置き換えられそう スクロール した時に Viewを 使いまわす

Slide 57

Slide 57 text

Activityはなるべくスリムに まとめ Fragment, CustomViewをうまく使おう Fragmentを使うときはルールを守ろう 画面遷移はcreateIntent()で DataBindingすごそう

Slide 58

Slide 58 text

参考資料 IUUQXXXTMJEFTIBSFOFUZBO[NESPJELBJHJZBO[N "DUJWJUZ 'SBHNFOU $VTUPN7JFXͷ࢖͍෼͚Ϛονϣͳ "DUJWJUZʹ͞ΑͳΒ͢Δํ๏

Slide 59

Slide 59 text

参考資料 IUUQHGYIBUFOBCMPHDPNFOUSZ "OESPJE%BUB#JOEJOHಋೖͷୈҰา #VUUFS,OJGF7JFX)PMEFSύλʔϯΛஔ͖׵͑Δ