Movatterモバイル変換


[0]ホーム

URL:


Takao Sumitomo, profile picture
Uploaded byTakao Sumitomo
PDF, PPTX18,064 views

用途に合わせたアニメーションの実装方法

Droidkaigi2016の発表資料です。

Embed presentation

Download as PDF, PPTX
DroidKaigi 2016 @cattaka_net用途に合わせたアニメーションの実装方法Takao Sumitomo@cattaka_net
DroidKaigi 2016 @cattaka_net自己紹介●住友 孝郎(Takao Sumitomo)●Androidアプリ開発者●開発経歴●Androidアプリ●iOSアプリ(ちょっとだけ)●業務系Webアプリケーション●業務系Windowsアプリ●その他●電子工作●OpenCV●ウォンテッドリー株式会社所属2014年12月〜
DroidKaigi 2016 @cattaka_netアプリに動きをつけていますか?
DroidKaigi 2016 @cattaka_net必要なときにググれば良いと思っていませんか
DroidKaigi 2016 @cattaka_net実はアニメーションの仕組みはAndroidのFWには沢山あります
DroidKaigi 2016 @cattaka_net一口にアニメーションといっても対象は何があるでしょう●Viewの中身を動かす●View自体を動かす●複数のViewを含むレイアウトを切り替える
DroidKaigi 2016 @cattaka_net今のAndroidフレームワークの現状●それぞれに仕組みが準備されています。●でも新しいのや古いのやでそれぞれに複数あり、ややこしいことになっている
DroidKaigi 2016 @cattaka_net今回はそれを整理したいというお話です
DroidKaigi 2016 @cattaka_netViewの中身を動かす
DroidKaigi 2016 @cattaka_netViewの中身を動かす●2種類●Animation Drawable●Animated Vector Drawable
DroidKaigi 2016 @cattaka_netAnimation Drawable●要はパラパラアニメ●必要なもの:複数の画像 & xml(1) (2)(3)
DroidKaigi 2016 @cattaka_netAnimation Drawable<?xml version="1.0" encoding="utf-8"?><animation-listxmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false"><itemandroid:drawable="@drawable/roll_cat_1"android:duration="200"/><itemandroid:drawable="@drawable/roll_cat_2"android:duration="200"/><itemandroid:drawable="@drawable/roll_cat_1"android:duration="200"/><itemandroid:drawable="@drawable/roll_cat_3"android:duration="200"/></animation-list>drawable/roll_cat.xml
DroidKaigi 2016 @cattaka_netAnimation DrawableImageView logoImage= (ImageView) findViewById(R.id.image_logo);logoImage.setBackgroundResource(R.drawable.roll_cat);AnimationDrawable rollCatDrawable= (AnimationDrawable) logoImage.getDrawable();rollCatDrawable.start();アニメーションを開始するコード
DroidKaigi 2016 @cattaka_netAnimated Vector Drawable●SVGをアニメーションさせる●必要なもの:xml
DroidKaigi 2016 @cattaka_netAnimated Vector Drawable<?xml version="1.0" encoding="utf-8"?><vector xmlns:android="http://schemas.android.com/apk/res/android"android:height="64dp"android:width="64dp"android:viewportHeight="600"android:viewportWidth="600" ><group android:name="characterGroup"><pathandroid:name="character"android:fillColor="#000000"android:pathData="M 80,0 24,24 0,80 l 24,56 56, -省略-” /></group><group android:name="feedGroup"android:translateX="80"><pathandroid:fillColor="#000000"android:pathData="M 72,64 l -8,8 0,16 8,8 16,0 8-省略-” />/></group></vector>これは動きのないただのSVG
DroidKaigi 2016 @cattaka_netAnimated Vector Drawable<?xml version="1.0" encoding="utf-8"?><animated-vectorxmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/vector_drawable" ><targetandroid:name="feedGroup"android:animation="@anim/av_translation" /><targetandroid:name="character"android:animation="@anim/av_path_morph" /></animated-vector>android:animationで動きを入れる
DroidKaigi 2016 @cattaka_netView自体を動かす
DroidKaigi 2016 @cattaka_netView Animation●必要なもの:xml & code
DroidKaigi 2016 @cattaka_netView Animation<?xml version="1.0" encoding="utf-8"?><translatexmlns:android="http://schemas.android.com/apk/res/android"android:duration="3000"android:fromXDelta="0%"android:fromYDelta="0%"android:interpolator="@android:anim/bounce_interpolator"android:toXDelta="100%"android:toYDelta="100%"/>Animation anim = AnimationUtils.loadAnimation(this, R.anim.va_move);mTargetButton.startAnimation(anim);xmlでアニメーションを定義コードからアニメーションを実行
DroidKaigi 2016 @cattaka_netView AnimationTranslateAnimation anim= new TranslateAnimation(0, mTargetView.getWidth(),0, mTargetView.getHeight());anim.setDuration(3000);mTargetView.startAnimation(anim);コードからアニメーションを実行コードでアニメーションを定義
DroidKaigi 2016 @cattaka_netProperty Animation●2通りの実装がFWにある●ObjectAnimatorクラス●必要なもの:xml or code●リフレクションを使っていて、属性の名前でアニメーションさせる●ViewPropertyAnimatorクラス●必要なもの:code●codeからしか使えないが、手軽に使える
DroidKaigi 2016 @cattaka_netObjectAnimator<?xml version="1.0" encoding="utf-8"?><objectAnimatorxmlns:android="http://schemas.android.com/apk/res/android"android:duration="3000"android:interpolator="@android:anim/bounce_interpolator"android:propertyName="translationX"android:valueFrom="0"android:valueTo="300"android:valueType="floatType"/>Animator anim= AnimatorInflater.loadAnimator(this, R.animator.pa_move);anim.setTarget(mTargetButton);anim.start();このtranslationXは何処を指しているか?xmlでアニメーションを定義コードからアニメーションを実行
DroidKaigi 2016 @cattaka_netObjectAnimatorViewクラスのメソッドを指している。つまりリフレクションで叩いている。
DroidKaigi 2016 @cattaka_netObjectAnimatorObjectAnimator animator= ObjectAnimator.ofFloat(mTargetButton, "translationX",0F, mTargetButton.getWidth());animator.setDuration(3000);animator.start();他にも ofInt や ofObject や ofMultiFloat などがあるコードからアニメーションを実行コードでアニメーションを定義
DroidKaigi 2016 @cattaka_netViewPropertyAnimatormTargetView.animate().translationX(mTargetButton.getWidth()).setDuration(3000).start();mTargetView.animate().rotation(360f).setDuration(3000).start();X方向に平行移動360°回転移動や回転以外に拡大縮小や透過も同じように書けます
DroidKaigi 2016 @cattaka_net複数のViewを含むレイアウト
DroidKaigi 2016 @cattaka_net名前の整理●Activity Animation●Fragment Animation●Transition●Activity Transition●Fragment Transitionそれぞれ異なる動きをする。(正式名称が見当たらなものは仮の名前です)
DroidKaigi 2016 @cattaka_netActivity/Fragment Animation
DroidKaigi 2016 @cattaka_netActivity Animation●必要なもの:xml & code●Viewを動かすのに使ったアニメーションと同じものを使うIntent intent = new Intent(this, At2Activity.class);startActivity(intent);overridePendingTransition(R.anim.aa_slide_in, R.anim.aa_slide_out);
DroidKaigi 2016 @cattaka_netFragment Animation●必要なもの:xml & code●Viewを動かすのに使ったアニメーションと同じものを使う●Support LibraryのFragmentかどうかによって落とし穴がある●Support Libraryを使うとき– View Animationを使う●Support Libraryを使わないとき– Property Animationを使う
DroidKaigi 2016 @cattaka_netFragment AnimationFragment fragment = Fa1Fragment.newInstance();FragmentTransaction ft = getSupportFragmentManager().beginTransaction();ft.setCustomAnimations(R.anim.aa_slide_in, R.anim.aa_slide_out);ft.replace(R.id.layout_fragment, fragment);ft.commit();バックキーで戻る時のアニメーションを指定する引数が4つのものも存在します。
DroidKaigi 2016 @cattaka_netTransition
DroidKaigi 2016 @cattaka_net3つのTransition共通の考え方●遷移前と遷移後のレイアウトに含まれるViewを3つのグループに分けて考える●前後の画面と共通のView●前の画面のみのView●後の画面のみのView●これら3グループについてそれぞれ動きを指定する
DroidKaigi 2016 @cattaka_net3つのTransition共通の考え方(1)(2)(3)(4)●前後の画面と共通のView:(1)は移動させる●前の画面のみのView :(2)(3)はフェードアウトさせる●後の画面のみのView :(4)はフェードインさせる
DroidKaigi 2016 @cattaka_netTransition●必要なもの:xml & code●ViewGroupの中身を入れ替えるときに使う●正直ViewGroupをコードから直接追加したり除去したり余りしないのでそもそも出番がすくない
DroidKaigi 2016 @cattaka_netTransition(1)(2)(3)(4)
DroidKaigi 2016 @cattaka_netTransitionScene scene = Scene.getSceneForLayout(mContainerLayout,R.layout.activity_ta_child_rb, this);Transition transition= TransitionInflater.from(this).inflateTransition(R.transition.ta);TransitionManager.go(scene, transition);対象となるViewGroup遷移後のレイアウトどのように遷移するか(次ページ)実行
DroidKaigi 2016 @cattaka_netTransition<?xml version="1.0" encoding="utf-8"?><transitionSetxmlns:android="http://schemas.android.com/apk/res/android"><fade/><changeBounds><targets><target android:excludeId="@id/button_excluded"/></targets></changeBounds></transitionSet>
DroidKaigi 2016 @cattaka_net指定できる動きの種類Class Tag 動きAutoTransition <autoTransition/> 自動Fade <fade/> フェードイン/アウト(オプションで指定)ChangeBounds <changeBounds/> 移動とリサイズJavadocを見ると、この他にChangeClipBounds, ChangeImageTransform,ChangeScroll, ChangeTransform, TransitionSet, Visibility, Explode, Slideがある
DroidKaigi 2016 @cattaka_netActivity Transition●必要なもの:xml or code(1)(2)(3)(4)
DroidKaigi 2016 @cattaka_netActivity TransitionActivityOptions options= ActivityOptions.makeSceneTransitionAnimation(this,new Pair<>(view.findViewById(R.id.image_logo),“transition:image_logo”));getWindow().setSharedElementEnterTransition(new ChangeBounds());getWindow().setSharedElementReturnTransition(new ChangeBounds());getWindow().setEnterTransition(new Fade());getWindow().setExitTransition(new Explode());Intent intent = new Intent(this, At2Activity.class);startActivity(intent, options.toBundle());遷移の前後で共通の要素を指定それぞれの動きを指定する
DroidKaigi 2016 @cattaka_netActivity Transition<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ImageViewandroid:id="@+id/image_logo"android:layout_width="match_parent"android:layout_height="wrap_content"android:adjustViewBounds="true"android:src="@drawable/logo"android:transitionName=“transition:image_logo”/><Buttonandroid:id="@+id/button3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_gravity="center_horizontal"android:text="Button 3"/></RelativeLayout>
DroidKaigi 2016 @cattaka_netFragment Transition●必要なもの:xml or code(1)(2)(3)(4)
DroidKaigi 2016 @cattaka_netFragment TransitionFragment fragment = Ft2Fragment.newInstance();fragment.setEnterTransition(new Fade(Fade.IN));fragment.setExitTransition(new Fade(Fade.OUT));fragment.setSharedElementEnterTransition(new ChangeBounds());fragment.setSharedElementReturnTransition(new ChangeBounds());FragmentTransaction ft = getFragmentManager().beginTransaction();ft.replace(R.id.layout_fragment, fragment);Fragment currentFragment= getFragmentManager().findFragmentById(R.id.layout_fragment);ft.addSharedElement(currentFragment.getView().findViewById(R.id.image_logo),"transition:image_logo");ft.addSharedElement( currentFragment.getView().findViewById(R.id.button_a),"transition:button_a");ft.addToBackStack(null);ft.commit();遷移の前後で共通の要素を指定それぞれの動きを指定する
DroidKaigi 2016 @cattaka_netFragment Transition<?xml version="1.0" encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- 省略 --><ImageViewandroid:id="@+id/image_logo"~~~~~~android:transitionName="transition:image_logo"/><FrameLayout~~~~~~><Buttonandroid:id="@+id/button_a"~~~~~~android:text="Button A"android:transitionName="transition:button_a"/></FrameLayout><!-- 省略 --></RelativeLayout>
DroidKaigi 2016 @cattaka_netAPIレベルについて名前 API LevelDrawable Animation 1 (Android 1.0)Animated Vector Drawable 21 (Android 5.0)View Animation 1 (Android 1.0)Property Animation 11 (Android 3.0.x)Transition 19 (Android 4.4)Activity Transition 21 (Android 5.0)Fragment Transition 21 (Android 5.0)
DroidKaigi 2016 @cattaka_netAPIレベルについて●Android 5.0で一通り揃っている●Transitionが比較的新しいバージョンでないと使えない●Support Libraryにメソッドはあるけど肝心のTransitionのクラスが無いので使えない
DroidKaigi 2016 @cattaka_netまとめ●アニメーションの仕組みは地味に多い●でもそれぞれ用途が異なる●用途に合わせたものを使おう●ユーザーにわかりやすい表現をしよう
DroidKaigi 2016 @cattaka_netサンプルアプリhttps://github.com/cattaka/LearnAnimationほとんどのコードのSnippetが入ってます
DroidKaigi 2016 @cattaka_netご清聴ありがとうございましたTakao Sumitomo@cattaka_net

Recommended

PDF
最速でリリースするためのAndroidアプリデザイン
PDF
開発を効率的に進めるられるまでの道程
PDF
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
PDF
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
PDF
テストがあればなんとかなる〜効率化までの道程〜
PDF
僕らのデータ同期プラクティス
PDF
パーミッションモデルの過渡期への対応
PDF
DroidKaigi2016 windows環境での効率的なアプリ開発手法
PDF
AndroidLint #DroidKaigi
PDF
Angularおじさんの1年
PDF
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
PDF
LIGにおけるフロントエンドチーム構築
PDF
Alternative WebView
PDF
いい感じのフロントエンド開発環境を作ってみた
PDF
[potatotips #18] Android M Developer Preview & Wear 最新トピック
PDF
Android,Brillo,ChromeOS
 
PDF
Android学ぶを君へ。生き抜くためのナレッジ共有
PDF
Android Dev Tools Knowledge
PDF
SQLiteDatabaseを無理矢理覗く
PDF
potatotips (iOS/Android開発Tips共有会) 第19回 資料
PDF
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
PDF
Visual Studio 2015 リリース記念 勉強会 universal windows platform app
PDF
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
PPTX
HTML5/JavaScriptで作るAndroidアプリ開発seminar
PDF
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
PDF
Front-end package managers
PDF
LIGでのDocker活用
PPTX
VS Code Day 2021 Recap
PDF
実践アニメーション
PDF
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ

More Related Content

PDF
最速でリリースするためのAndroidアプリデザイン
PDF
開発を効率的に進めるられるまでの道程
PDF
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
PDF
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
PDF
テストがあればなんとかなる〜効率化までの道程〜
PDF
僕らのデータ同期プラクティス
PDF
パーミッションモデルの過渡期への対応
PDF
DroidKaigi2016 windows環境での効率的なアプリ開発手法
最速でリリースするためのAndroidアプリデザイン
開発を効率的に進めるられるまでの道程
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
テストがあればなんとかなる〜効率化までの道程〜
僕らのデータ同期プラクティス
パーミッションモデルの過渡期への対応
DroidKaigi2016 windows環境での効率的なアプリ開発手法

What's hot

PDF
AndroidLint #DroidKaigi
PDF
Angularおじさんの1年
PDF
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
PDF
LIGにおけるフロントエンドチーム構築
PDF
Alternative WebView
PDF
いい感じのフロントエンド開発環境を作ってみた
PDF
[potatotips #18] Android M Developer Preview & Wear 最新トピック
PDF
Android,Brillo,ChromeOS
 
PDF
Android学ぶを君へ。生き抜くためのナレッジ共有
PDF
Android Dev Tools Knowledge
PDF
SQLiteDatabaseを無理矢理覗く
PDF
potatotips (iOS/Android開発Tips共有会) 第19回 資料
PDF
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
PDF
Visual Studio 2015 リリース記念 勉強会 universal windows platform app
PDF
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
PPTX
HTML5/JavaScriptで作るAndroidアプリ開発seminar
PDF
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
PDF
Front-end package managers
PDF
LIGでのDocker活用
PPTX
VS Code Day 2021 Recap
AndroidLint #DroidKaigi
Angularおじさんの1年
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
LIGにおけるフロントエンドチーム構築
Alternative WebView
いい感じのフロントエンド開発環境を作ってみた
[potatotips #18] Android M Developer Preview & Wear 最新トピック
Android,Brillo,ChromeOS
 
Android学ぶを君へ。生き抜くためのナレッジ共有
Android Dev Tools Knowledge
SQLiteDatabaseを無理矢理覗く
potatotips (iOS/Android開発Tips共有会) 第19回 資料
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Visual Studio 2015 リリース記念 勉強会 universal windows platform app
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
HTML5/JavaScriptで作るAndroidアプリ開発seminar
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Front-end package managers
LIGでのDocker活用
VS Code Day 2021 Recap

Similar to 用途に合わせたアニメーションの実装方法

PDF
実践アニメーション
PDF
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
PPTX
AndroidのアニメーションをちょっとだけLT
PDF
第二回Android training4desinger 2
PDF
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
ODP
アニメーションクラス
PDF
Viewを動的に変化させるアプローチ
PPTX
Androidにかっこよく動くアイコンを
PPTX
Androidにかっこよく動くアイコンを
実践アニメーション
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
AndroidのアニメーションをちょっとだけLT
第二回Android training4desinger 2
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
アニメーションクラス
Viewを動的に変化させるアプローチ
Androidにかっこよく動くアイコンを
Androidにかっこよく動くアイコンを

More from Takao Sumitomo

PDF
僕は上スワイプでBottomSheetを出したかっただけなんだ
PDF
sharedUserIdを使った俺得開発ツールの作り方
PDF
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
PDF
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
PDF
アプリを成長させるためのログ取りとログ解析に必要なこと
ODP
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
PDF
高速でトライ&エラーを するために気をつけてること
PDF
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
PDF
プロダクトを育てるのにGoogleのサービスが助けてくれること
PDF
AdapterToolboxでRecyclerViewを楽にする
PPTX
エンジニアがプロダクト育成を始めるまでにやったこと
PPTX
Wantedlyのテスト事情
PPTX
Uml速習会
PDF
勉強会資料 データ構造とアルゴリズム
PDF
勉強会資料 Uml概要
PDF
Firefox OSの何が嬉しいか
PDF
HTML5でFirefox OSアプリを作ろう
PDF
フォクすけロボ開発進捗報告
PDF
今更ながらCSS3を試してみた
PDF
Crystalskullを改造してみる
僕は上スワイプでBottomSheetを出したかっただけなんだ
sharedUserIdを使った俺得開発ツールの作り方
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
高速でトライ&エラーを するために気をつけてること
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
プロダクトを育てるのにGoogleのサービスが助けてくれること
AdapterToolboxでRecyclerViewを楽にする
エンジニアがプロダクト育成を始めるまでにやったこと
Wantedlyのテスト事情
Uml速習会
勉強会資料 データ構造とアルゴリズム
勉強会資料 Uml概要
Firefox OSの何が嬉しいか
HTML5でFirefox OSアプリを作ろう
フォクすけロボ開発進捗報告
今更ながらCSS3を試してみた
Crystalskullを改造してみる

用途に合わせたアニメーションの実装方法


[8]ページ先頭

©2009-2025 Movatter.jp