SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
実践アニメーション ~複雑なアニメーションへのアプローチ~
湯上 尚哉
資料について
PDF に ODP を埋め込んでありますので、ダウンロード後 LibreOffice で
開くとアニメーション gif が動きます
サンプルコード
https://github.com/citrous/practicalanimation
目次
1. 自己紹介とこの講義について
2. View アニメーションの基礎
3. 様々なアプローチの紹介
3-1. 複数の要素を組み合わせる
3-2. AnimatedVectorDrawable の作り方
3-3. コードで実装する
目次
1. 自己紹介とこの講義について
2. View アニメーションの基礎
3. 様々なアプローチの紹介
3-1. 複数の要素を組み合わせる
3-2. AnimatedVectorDrawable の作り方
3-3. コードで実装する(ここが本編!)
1. 自己紹介とこの講義について
湯上 尚哉(ゆのうえ なおや)
Android と Kotlin 大好き
ワインと日本酒も大好き
最近 Netflix に夢中
株式会社セプテーニ・オリジナルで
「 GANMA! 」という漫画アプリの開発に従事
Android も Scala で書いています
Android のアニメーション
どうやって作るべき?
アニメーション画像データがあるなら問題なし!
ない場合、どうやって作るのか?
Animation 関連の API がたくさん
・ Animation クラス
・ Transition Animation
・ Property Animation
・などなど
複雑なアニメーションを実装する際に
どういうアプローチが存在するのかを紹介します
2. View アニメーションの基礎
Android の基本的なアニメーション
・移動( Translation )
・拡大縮小( Scale )
・回転( Rotation )
・透過( Alpha )
移動( Translation )
view.animate().translationX(128).translationY(128).start();
拡大・縮小( Scale )
view.animate().scaleX(2.0f).scaleY(2.0f).start();
回転( Rotation )
view.animate().rotation(180f).start();
透過( Alpha )
view.animate().alpha(0f).start();
Material Design からのアニメーション事情
・物理的な視覚効果を表現する
・ユーザーアクションへのフィードバックが重要
→ Ripple Effect, Transition Animation
今時のアプリのデザイン
・シンプルなアニメーションでは表現力不足
・なんだか物足りない
3. 複雑なアニメーションへのアプローチ
複数の要素を組み合わせる
res/animator に AnimatorSet のリソースを作る
他の View にも使いまわせる
・ typo が怖い
・アニメーションが複雑になってくると読み辛い
・一度作成したリソースが聖域になりやすい
AnimatedVectorDrawable
ObjectAnimator を使って VectorDrawable を
アニメーションさせる
Android Icon Animator
https://romannurik.github.io/AndroidIconAnimator/
Google の Roman Nurik 氏による神ツール
作成したアニメーションアイコンを xml で出力可能
VectorDrawable に対応した
アニメーションアイコンを手軽に作成できる
プレビュー版とはいえ実用性は十分
アニメーションさせる対象が増えると大変…
シンプルなアニメーションアイコンは
手軽に作成できる
プレビュー版とはいえ実用性は十分
アニメーションさせる対象が増えると大変…
こんなアニメーションは?
ここからが本題です
ValueAnimator + CustomView 万能説
ValueAnimator
・ ObjectAnimator の継承元
・ API Level 11 ~
・指定した値を指定した時間内で変化させる
・複数のプロパティを持たせることも可能
ここで指定した時間内で
ここで指定した値が 0 ~指定値まで変わる
・ setValues は基本的に何でも OK
・複数の値を Key-Value で指定できる
・開始時の値を指定することも可能 (API Level 21 ~ )
setValues のなかまたち
setFloatValues(float... values) → float 値
setIntValues(int... values) → int 値
setValues(PropertyValuesHolder... values)
→ PropertyValuesHolder を入れられる
setObjectValues(Object... values)
→ 何でも OK. 推移は setEvaluator で定義する
Interpolator に合わせて変化させることができる
最初ゆっくり後半加速とか、最初と最後ゆっくりとか
UpdateListener を設定
値が更新されたタイミングで View を更新してあげる
View の onDraw() で ValueAnimator の値をもとに
図形を描画
各点の描画
X 座標 = value * ランダム数値 1 + A
Y 座標 = (value * ランダム数値 2)^2
- 2( ランダム数値 2 * ランダム数値 3) + A
ランダム数値 : アニメーション開始時に生成
value: ValueAnimator で取得できる値
A: View の中心までの座標
出来上がり
ValueAnimator を複数使った例
・全てコード内で完結する
・描画の相対座標指定やランダム要素の付加等が楽
・アニメーション対象が増えても追加しやすい
・複雑になった場合の可読性が xml より高そう
まとめ
・画像リソースがあるならそれに越したことはない
・ Android Icon Animator は便利
・ ValueAnimator + CustomView で何とでもなる
素敵な Android アニメーションライフを
お過ごしください

Contenu connexe

En vedette

用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法Takao Sumitomo
 
Viewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチViewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチTakao Sumitomo
 
DroidKaigi 2017 welcometalk DAY01
DroidKaigi 2017 welcometalk DAY01DroidKaigi 2017 welcometalk DAY01
DroidKaigi 2017 welcometalk DAY01Masahiro Hidaka
 
DroidKaigi 2017 welcometalk DAY02
DroidKaigi 2017 welcometalk DAY02DroidKaigi 2017 welcometalk DAY02
DroidKaigi 2017 welcometalk DAY02Masahiro Hidaka
 
Android Dev Tools Knowledge
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools KnowledgeShinobu Okano
 
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
明日から使えるRxjava頻出パターン (Droid kaigi 2016)明日から使えるRxjava頻出パターン (Droid kaigi 2016)
明日から使えるRxjava頻出パターン (Droid kaigi 2016)Kazuki Yoshida
 
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法tkawashita
 
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)Kengo Suzuki
 
Master of Canvas
Master of CanvasMaster of Canvas
Master of CanvasMima Yuki
 
パーミッションモデルの過渡期への対応
パーミッションモデルの過渡期への対応パーミッションモデルの過渡期への対応
パーミッションモデルの過渡期への対応ak_shio_555
 
怖くないGradle設定とBazel
怖くないGradle設定とBazel怖くないGradle設定とBazel
怖くないGradle設定とBazelshimada tatsuya
 
最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザイン最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザインNaoki Aoyama
 
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Takuya Ueda
 
少し幸せになる技術
少し幸せになる技術少し幸せになる技術
少し幸せになる技術kamedon39
 
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Yuki Anzai
 
Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Takami Sato
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんYukari Sakurai
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?kwatch
 

En vedette (20)

用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
 
Viewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチViewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチ
 
DroidKaigi 2017 welcometalk DAY01
DroidKaigi 2017 welcometalk DAY01DroidKaigi 2017 welcometalk DAY01
DroidKaigi 2017 welcometalk DAY01
 
DroidKaigi 2017 welcometalk DAY02
DroidKaigi 2017 welcometalk DAY02DroidKaigi 2017 welcometalk DAY02
DroidKaigi 2017 welcometalk DAY02
 
Android Dev Tools Knowledge
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools Knowledge
 
Client-Side Deep Learning
Client-Side Deep LearningClient-Side Deep Learning
Client-Side Deep Learning
 
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
明日から使えるRxjava頻出パターン (Droid kaigi 2016)明日から使えるRxjava頻出パターン (Droid kaigi 2016)
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
 
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法
 
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
 
Master of Canvas
Master of CanvasMaster of Canvas
Master of Canvas
 
パーミッションモデルの過渡期への対応
パーミッションモデルの過渡期への対応パーミッションモデルの過渡期への対応
パーミッションモデルの過渡期への対応
 
怖くないGradle設定とBazel
怖くないGradle設定とBazel怖くないGradle設定とBazel
怖くないGradle設定とBazel
 
最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザイン最速でリリースするためのAndroidアプリデザイン
最速でリリースするためのAndroidアプリデザイン
 
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
 
AndroidLint #DroidKaigi
AndroidLint #DroidKaigiAndroidLint #DroidKaigi
AndroidLint #DroidKaigi
 
少し幸せになる技術
少し幸せになる技術少し幸せになる技術
少し幸せになる技術
 
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
 
Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 

Similaire à 実践アニメーション

Createjs jp study #4 20130726
Createjs jp study #4 20130726Createjs jp study #4 20130726
Createjs jp study #4 20130726Seigo Tanaka
 
Unity/CSharp 1 - pptx
Unity/CSharp 1 - pptxUnity/CSharp 1 - pptx
Unity/CSharp 1 - pptxtagawakiyoshi
 
openFrameworksセミナー(2014)レポート
openFrameworksセミナー(2014)レポートopenFrameworksセミナー(2014)レポート
openFrameworksセミナー(2014)レポートNariaki Iwatani
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2Shuichi Tsutsumi
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
 
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpAPIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpTakeshi Komiya
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたYasuharu Seki
 
Room metro Tokyo #3 発表資料です。
Room metro Tokyo #3 発表資料です。Room metro Tokyo #3 発表資料です。
Room metro Tokyo #3 発表資料です。Manato KAMEYA
 
Django と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMSDjango と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMSIosif Takakura
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Reportgree_tech
 
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生Satoru Kodaira
 
Ninja framework使ってみた
Ninja framework使ってみたNinja framework使ってみた
Ninja framework使ってみたeiryu
 
C++でiOSアプリ
C++でiOSアプリC++でiOSアプリ
C++でiOSアプリ5mingame2
 
2013講義1
2013講義12013講義1
2013講義1ytanno
 
ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場Shota Suzuki
 
Firefox拡張機能を始める
Firefox拡張機能を始めるFirefox拡張機能を始める
Firefox拡張機能を始めるegtra
 

Similaire à 実践アニメーション (20)

Createjs jp study #4 20130726
Createjs jp study #4 20130726Createjs jp study #4 20130726
Createjs jp study #4 20130726
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
Unity/CSharp 1 - pptx
Unity/CSharp 1 - pptxUnity/CSharp 1 - pptx
Unity/CSharp 1 - pptx
 
OpenCV 3.0 on iOS
OpenCV 3.0 on iOSOpenCV 3.0 on iOS
OpenCV 3.0 on iOS
 
openFrameworksセミナー(2014)レポート
openFrameworksセミナー(2014)レポートopenFrameworksセミナー(2014)レポート
openFrameworksセミナー(2014)レポート
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpAPIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
 
Room metro Tokyo #3 発表資料です。
Room metro Tokyo #3 発表資料です。Room metro Tokyo #3 発表資料です。
Room metro Tokyo #3 発表資料です。
 
Unity/CSharp 3
Unity/CSharp 3Unity/CSharp 3
Unity/CSharp 3
 
Django と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMSDjango と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMS
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
 
Unity/CSharp 2
Unity/CSharp 2Unity/CSharp 2
Unity/CSharp 2
 
Ninja framework使ってみた
Ninja framework使ってみたNinja framework使ってみた
Ninja framework使ってみた
 
C++でiOSアプリ
C++でiOSアプリC++でiOSアプリ
C++でiOSアプリ
 
2013講義1
2013講義12013講義1
2013講義1
 
ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場
 
Firefox拡張機能を始める
Firefox拡張機能を始めるFirefox拡張機能を始める
Firefox拡張機能を始める
 

実践アニメーション