「第1回オーシャンビューAndroid/iOS勉強会inBizreach #オーシャンビュー勉強会」に参加してきました
Bizreachさんが毎週もくもく会としてスペースを公開していたそうで、今回は勉強会としての開催でした。
Google I/O 2014 アプリに学ぶ Material Design の実装
Gunosyの@hydrakecatさんによる発表。オライリー本の翻訳なども行っているそうです。 以前にGunosyでMaterial Designの勉強会を行い、今回はその復習とのこと。
Material Designとは
- ユーザにとって一番馴染みのある紙をメタファーに使ったデザイン
- AndroidでMaterial Design
- Material Design ≠ Android L
- 4.4や2.xでもMaterial Designはできる
- Lolipopの機能を使うと簡単にできる
- Material Design ≠ Android L
Google I/O 2014アプリ
- Google I/O 2014イベント用アプリ
- ソースコードが公開されている
Material Designに関するLolipopの新規機能
- マテリアル・テーマ(Material Theme)
- リストとカード(Lists and Cards)
- 影とクリップ(Shadows and Clipping Views)
- 画像(Drawables)
- アニメーション(Animations)
互換性(Compatibility)
1. マテリアル・テーマ
- マテリアルテーマを使うとタッチフィードバックなどデフォルトのデザインを利用できる
- カラーパレットの各色を指定することで、簡単にテーマをカスタマイズできる
- ベース・テーマは3種類
- ステータスバー、ナビゲーションバーの色も指定可能
2. リストとカード
- I/Oアプリでは使っていなかったので省略
3. 影とクリップ
- z軸方向の位置を指定できる
- I/0アプリにおける影の使い方
- スクロール量に応じて影の長さが変わる
- Viewの外形とクリップ
- 影の形およびタッチフィードバックの領域を決める外形を指定できる
- 外形し指定した形にViewをクリップすることも可能(setClipToOutlineメソッド)
4. 画像
- 画像の着色
- android:tintプロパティで画像の着色ができる
- I/Oアプリではスケジュール追加ボタンに使用している
- 普通はテーマカラーを変えたら全ての画像を作り直す必要があるが、これを用いればコードから画像の色を変えられる
5. アニメーション
- タッチ・フィードバック(Touch Feedback)
- 出現エフェクト(Reveal Effect)
- アクティビティの遷移(Activity Transition)
- ビューの状態遷移(Animating View State Changes)
- 画像の着色(Drawable Tinting)
a. タッチ・フィードバック
- ボタンにはデフォルトで当たっている
- 電卓などタップすると波紋状にエフェクトがかかる
- ripple要素を使えば同様のタッチフィードバックを持ったdrawableが作れる
b. 出現エフェクト
- 円形状のアニメーションでViewを出現させることができる
- 現在は円形のみ
c. アクティビティの遷移
- 以下のそれぞれにアニメーションを設定できる
- Enter: Activityに入るときのシーン
- Exit: Activityから出るときのシーン
- Shared elements: Activity間で共有されているView
d. ビューの状態遷移
- 状態が変わった時の見た目だけでなく、そのときのアニメーションも指定可能
- Viewのプロパティをどれくらいの時間でどう変化させるか
6. 互換性
- Lolipop以前の端末でも同様のUIを提供している
- どうやっているか
- ソースコードの切り替え
- gradleのflavorを使って切り替えている
- リソースファイルの切り替え
- ソースコードの切り替え
Tips
- Google Play Serviesが最新ではないと怒られる
- build.gradleの設定で5+から5.0.+に変更
Android 4.4で追加されたステップカウンターを実装した話
@uturistさんによる発表。最近のプロダクトSmanpoで取り入れたステップカウンターのお話。
ステップカウンターとは
- Android 4.4 KitKatからプラットフォームでサポートされたセンサ
- Step Detector(徒歩検出)
- Step Counter(歩数カウンタ)
- 処理をハードウェアで行っているのでバッテリー消費を抑えられる
- 端末サポート状況
- 287 / 7471
- 最近の端末の多くはサポートしている(Nexsus、Xperia、Galaxyなど)
実装について
- ギャップロに詳しく書いてある
- イベントから取得できる情報
- 精度(4段階)
- センサー(検出かカウンタか)
- 時間
- 値
カウンタの挙動について
- 端末起動後リスナ設定中の累積歩数
- リスナ登録がonResume〜onPause
- Activityが画面に表示されている間
- リスナ登録がonCreate〜onDestroy
- プロセスが生きている限りカウント
- ただし、他のアプリがリスナ設定していれば、Activityが画面に表示されていなくてもアプリが生きていなくてもカウントされる
- リスナ登録がonResume〜onPause
Smanpoに使ってみて
- バッテリの減りは気にならない
- 実装は簡単
- 加速度センサでやろうとすると大変
- マニフェストファイルの記載を忘れずに
- ステップカウンターが普及すれば世の中がより健康的になる
Android開発でのデバッグ環境どうしてますか
@yoshimaaさんによる発表。
でも実機でやりたい
自作アプリをiOS 8対応した話 〜FastCheckin編〜
@koogawaさんによる発表。
FastCheckin
- 素早く簡単にfoursquareにチェックインするためのアプリ
- iOS 8対応でやったこと
- 位置情報取得方法の変更
- ウィジェット対応
位置情報取得方法の変更
- iOS 8から位置情報周りが変わった
- プライバシー設定が細かくなった
- 許可しない(Never)
- 使用中のみ許可(WhenInUse)
- 常に許可(Always)
- UsageDescriptionが必須に
- どのような目的で位置情報を使用するのかを表示する必要がある
- 表示しないと位置情報が取得できない
- 以前からあったが、書かなくても使用できた
- NSLocationWhenInUseUsageDescription項目
- ダイアログに表示される
- どのような目的で位置情報を使用するのかを表示する必要がある
- 認証リクエストAPI追加
ウィジェット対応
- ウィジェットとは
- 作り方
- ウィジェット用のターゲットを追加
- File > New > Target > Application Extension > Today Extension
- 最初からHello Worldと表示するだけのウィジェットが入っている
- ウィジェットUIをレイアウト
- Storyboardでもコードでも可能
- ウィジェット用のターゲットを追加
- 注意点
- キーボードは使えない
- アラートビューなども使えない
- 高さには制限がある
- 使用メモリ量に注意(16MB以内?)
- 16MB以上なので重いよ、という感じのメッセージがでた
10分でTwitterクライアントを作ってみますん
@mofmofnekoさんによる発表
10分でつくるのは無理なので、それに向けたライブラリの紹介
Genymotion
Android-Bootstrap
- 簡単にいい感じのデザインを実装できる
- Font Awesome
- Circle Thumbnail
- 流行り?の円形アイコンの実装
PICASSO
- 画像のダウンロード、表示、キャッシュを良しなにやってくれるライブラリ
JsonPullParser
- Jsonデータを扱うライブラリ
Volley
- 通信処理を簡素化してくれるライブラリ
OrmLite
- O/Rマッピングライブラリ
Butter Knife
- アノテーションでコード量を短縮できるライブラリ
Jenkins
- CIツール
その他
非常に面白いスペースで、ハロウィン限定で赤い海が打ち寄せてました