TransitionのShowcaseアプリを作って公開しました
はじめに
先日droid girls meetupに参加し、Animationのハンズオンを楽しんできた。 GoogleのオフィスでGooglerの方(Support libraryを作っている方)が講師というなんとも贅沢な回だった。
そういえば業務でがっつりtransitionをさわる機会がないなぁと思っていたので折角なので色々試してみた。 ついでに、
アニメーション何種類か切り替えるサンプルアプリ作ってデザイナさんと共有したい!!!! #droidgirls
— むーむー (@muumuumuumuu) 2018年4月20日
そういえばこんなことをつぶやいていたのでShowcase的なアプリにして公開することにした。
Source code
コードはこちら。
サンプルの中にソースコードのgithubページに飛べるボタンを置いておいたので、ここどうやって実装してるのかな?って思ったらすぐコードを確認できるようにしておいたのでよければみて見て下さい。
とはいうもののあまりまだサンプルを作れていなくて、作ったのは下記の3つ。
- ObjectAnimator(Scale)
- Arc Motion Transition
- Shared element Activity Transition
それぞれについて気になったポイントとかハマったポイントを書き残しておく。
ObjectAnimator(Scale)
連続するanimationを記述するときに ktxのAnimatorクラスの拡張関数が便利だった。ただしsupport libraryのtransitionとかに対する拡張関数は生えてないようなので実はそんなに使い所は多くないかもしれない。
Arc Motion Transition
最初 ArcMotion()
を一次元上での移動に対して設定しており、カーブを描くanimationにならずにハマった。ArcMotionのコードを読んでいるとどうやらベジエ曲線を軌跡とするため、一次元だと曲線にならないっぽい。(一次ベジエ曲線は単なる線分なので。)
余談だけどこれのおかげで TransitionManager
周りのコードを読んで`TransitionManager#beginDelayedTransition()`が何をやっているか理解できた。sceneChangeRunTransition()
のなかで対象のViewGroupのViewTreeObserver
を登録しておき、view parameterが変わったりしてそのViewGroupにlayoutが走った時とかに onPreDraw()
等を検知して登録したtransitionに対して playTransition()
をコールする仕組みだった。へー。
Shared element Activity Transition
Shared element Activity Transition自体は思ったよりかなり簡単にできたが、全く関係のない別の箇所でハマった。
CoordinatorLayout
の中に入れるScrollできるViewはRecyclerView
かNestedScrollVIew
しかダメっぽい。普通のScrollView
を入れてもAppBarLayout
はcollapsedされないし、AppBarLayout
とScrollView
が重なってしまう。これ毎回忘れて毎回ハマる気がする…
もっといろんなanimation作ってどんどん足して行きたいなー