レポート

Androidエンジニアの祭典「DroidKaigi 2017」参加レポート

この記事を読むのに必要な時間:およそ 2 分

マテリアルデザインのアニメーションで守るべき4原則

マテリアルデザインにおけるアニメーションでは守らなければならない以下の4原則があり,それらを満たすことが重要になってくると毛受氏は述べます。

  • Responsive - 迅速に反応すること
  • Natural - 自然な動きであること
  • Aware - 他のマテリアルと協調すること
  • Intentinal - 意図があること

これらを満たしつつアニメーションさせる上で必要な知識として,ガイドラインから以下の要素について説明を行いました。

  • 高度とシャドウ
  • 継続時間とイージング
  • 運動
  • マテリアルの変形
  • コレオグラフィ
  • クリエイティブなカスタマイズ
  • パターン - 画像の読み込み
  • パターン - 画面遷移

さらにアニメーションを実現する上でShared Element Transition APIを使う機会が増えるため,その掘り下げとしてデバッグ方法やチェックリストについても触れました。

デバッグ方法
  • 現在実行中のTransition情報を表示し,アニメーション以外の形式で認識する
  • 開発者オプションのアニメーションスケールを用いてアニメーションを観測する
  • 点滅するだけのTransitionを用いて,期待するTransitionがいつ動くのか確認する
チェックリスト
  • themeのwindowActivityTransitionsのフラグをチェックする
  • ImageViewのscaleTypeをいじってみる
  • Viewの背景色を確認する
  • Transitionの開始を待つ必要がある実装かどうか
  • Fade系ではandroid.transition.Visibilityを継承しているか
  • ShareでないWindowTransitionの場合に,VisibilityやTransitionSetを継承したTransitionになっているか

またAnimatedVectorDrawableの作成ではAndroidIconAnimatorを用いると良いことも共有しました。

マテリアルデザインをサポートする上で課題となってくる,低いAPIレベルのサポートについても話がありました。毛受氏はAndroid 5.0未満のサポートについて以下の3つの選択肢を示しました。

  • そもそもAndroid 5.0未満をアプリとしてサポートしない
  • Android 5.0未満ではアニメーションをしない
  • サードパーティー製ライブラリを用いる

現在のAndroid OSシェアの観点から,Android 5.0未満を対応端末から外す選択肢が現実的でないことを述べ,⁠アニメーションをしない」方式と「サードパーティー製ライブラリを用いる」方式のどちらかをうまく使い分けることになるだろうと結論付けました。

最後に「マテリアルデザインのアニメーションは実現可能である」として毛受氏は自身の講演を締めました。驚くことに,発表スライドにもマテリアルデザインのアニメーションを取り入れており,発表スライドを見るだけでもアニメーションのイメージが掴めるような非常に勉強になるセッションとなりました。

まとめ

第3回開催となるDroidKaigi2017は国内外を含む800人の参加者,67セッションが集まりました。立ち見が発生したり,部屋に入り切らずにドアが閉められないセッションもあるなど,非常に熱気溢れる回となりました。

このレポートでは毛受氏のセッションを1つ取り上げて紹介しましたが,どのセッションも非常に魅力的で,興味深い内容が集まっていました。まだまだ進化し続けるAndroidの技術について,800人という人間が意見を共有・交換した非常に濃い2日間となりました。

個人的に驚いた点として,平日開催にも関わらず非常に多くの方が1日目から参加していたこと,またオフィスアワーや企業ブースでの議論や意見交換が非常に活発であったことが挙げられます。

ウェルカムトークで@lvla0805氏が述べたように,自分にとって当たり前の情報は他の開発者にとって有益かもしれません。この記事を読んだ皆さんも,次回のDroidKaigiではぜひセッションに応募し,参加してみてはいかがでしょうか。

(写真協力:横幕圭真,Yuki Fujisaki,Iwata Naoki)

著者プロフィール

Jumpei Matsuda

Quipper Limitedに勤めるAndroidエンジニア。教育系のアプリ開発に従事している。

GitHub:https://github.com/jmatsu