choco-ballの日記

勉強のアウトプットのためのブログ

Android Studioのビューアニメーションの罠

仕事が忙しくずっと放置してしまってました・・・。
本日はタイトル通りの内容です。
仕事でアニメーション作成の際の記述で沼ったので解説を・・・。
皆さんがアニメーションを制作するときに、記述を調べたくてネット検索を行うかと思います。
その際に「移動 アニメ」などとして結果上位に表示されるのは大体がビューアニメーションです。
でもこのビューアニメーション・・・便利ですがとある罠があります。

ビューアニメーションのはビューの見た目を変えるという機能です。

「いや、何を当たり前なことを」
と思ったそこのあなた!
悲報です。

こいつは見た目が動くだけで、座標情報を保持していないんです。
どういうことかというと、
プログラム上はもともとの座標のままで、見た目のみが移動しているということです。
そのため、一度移動を終えたビューに対して再度移動をさせようとすると初期値(xmlで指定した位置)からの開始になります。

私自身この仕様に気が付かずに色々な記述を試し、時間を浪費してしまいました。
移動さきの座標情報がない以上相対的な移動は不可能なんです・・・。無理やり連続させるなら親の左上起点の絶対値での移動になります。

さて、ここで朗報です。

私のもとにObjectAnimatorという神が降臨しました。
こいつは・・・このお方は、見た目ではなくオブジェクト本体の座標情報を変更します。
ObjectAnimato様で移動した時には移動先の情報が保持されます。

故にアニメ終了後に移動した位置から再度動かすことが可能となります。
基本的な記述は以下のようになります。

ObjectAnimator.ofFloat(ビュー, "プロパティ名前", Float型移動数値)


少し実用的にすると以下のような感じ

//引数でビューオブジェクトと移動距離を取得
fun xAnimation(v:View,xNum){
    
    //オブジェクトアニメーターにビューとプロパティを設定し、移動距離を突っ込んで実行
    val anime = ObjectAnimator.ofFloat(v, "translationX", xNum).apply{
        dulation = 1000
        start()
    }
}

//関数にビューオブジェクトと移動距離を渡す
xAnimation(binding.view,400f)


はい。これで座標の罠にかかることがなくなりましたね。
次回は円軌道でオブジェクトを動かす方法についてアウトプットしようかと思います。
資料が公式リファレンスくらいなもので、実際にブログなどで上げている方がほとんどいなかったので・・・。