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

More Related Content

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

What's hot

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

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

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

More from Takao Sumitomo

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

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


[8]ページ先頭

©2009-2025 Movatter.jp