2012年8月5日日曜日

androidの標準アニメーションで円を描く(2)

androidの標準アニメーションで円を描くの続きです。

---

レギュレーションを、自作Interpolatorの許可、コードでの合成許可にすると、円運動は非常に簡単に実現できます。

https://github.com/glayash/Madoka/blob/master/src/glay/ash/madoka/MainActivity.java

与えられる0.0f~1.0fの値を、0~2πに変換して、x軸とy軸をそれぞれcosとsinで算出するカスタムInterpolatorを用いて、アニメーションを合成するだけでいけます。

「カスタムInterpolatorはフレームワークが与える入力値を操作・キャッシュできる」のがポイントです。ストップボタンを設置して、それ以降は入力値を捨ててキャッシュ値を使うようにすれば、アニメーション中断が実現できます。

https://github.com/glayash/Madoka/blob/stopAnimation/src/glay/ash/madoka/MainActivity.java

停止した時点の中断値を取得して、そこをアニメーションの始点とすることで、再開も実現できそうな感じですが、大変そうなのでそこまではやりませんでした。

---

頑張れば使える子だと思う標準アニメーションなんですけど、実用方面ではやっぱり難しいところがあります。

移動中・移動後のViewの座標を取得できない(カスタムInterpolatorでフレームワークからの入力値を横取りして算出する、という小細工に頼る必要があります)、動いているのは見た目だけで、判定を動かすアニメーションは3.0以降でしか使えない、などなど。

---

あと落とし穴の一つとして、ビューの表示順序を操作できません。

どのビューが前面に描画されるかは、フレームワークがビュー階層をトラバースする順番によって決定付けられていて、ユーザーが関与することができないのです。

例えば、リストビューの要素はそれぞれ優先順位が違うので、要素同士が交差するスライドアニメーションは、意図した動きにならないと思います。

0 件のコメント:

コメントを投稿