android Studio 4.0が出たので試しに触ってみた
の続編
Android Studio 4.0でMotion Editorが追加されたのでこれを使ってアニメーションを作ってみた
・Convert to MotionLayout
ConstraintLayoutをビジュアルモードで右クリックすると
自動でMotionLayoutが作られると書かれていたが動かないw
androidx.constraintlayout:constraintlayout:2.0.0-beta3
以上を使う必要があるとのこと
最新は以下だったので以下を利用することをオススメ
androidx.constraintlayout:constraintlayout:2.0.0-beta6
Convertすると、layoutファイルがMotionLayout仕様になり
さらにmotion_scene.xmlが作られる
余談だけどLinearLayoutをConstraintLayoutにコンバートする機能が
いつの間にか付いてることに気づいた
・Motion Editorの使い方
StartとEndで特定のViewの位置を変える
その後、Transitionの矢印をクリックするとタイムラインが出てくる。
そして、再生を押すと自動で前後の間隔を補って再生してくれる
また、右側にあるOnClickをいじると
クリック時にアニメーション再生等のアクションを追加できる
・MainActivity.kt
ここからサンプルコード
motionLayoutに対してメソッドを実行するとActivity起動時にアニメーションしてくれる
setDebugModeするとアニメーションの線が引かれる
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.motion)
// motionLayout.setDebugMode(MotionLayout.DEBUG_SHOW_PATH)
}
override fun onResume() {
super.onResume()
GlobalScope.launch {
delay(1000L)
motionLayout.transitionToEnd()
}
}
}
・motion.xml
試しに作ったlayoutをconvertした結果
一番外枠がMotionLayoutになった
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/motionLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/motion_scene">
<ImageView
android:id="@+id/imageView_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_animation_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="animation start"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</androidx.constraintlayout.motion.widget.MotionLayout>
・motion_scene.xml
これがアニメーションの設定ファイル
読めばなんとなくわかるけど、ConstraintSetで最終的な位置を設定して
Transitionでstartとendを設定してる
OnClickはTranstionに一つしか設定できないので、割と使い勝手悪そう・・・・
普通にlayout側に書いた方が良いかもね
<?xml version="1.0" encoding="utf-8"?>
<MotionScene
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto">
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@id/start"
motion:duration="1000">
<KeyFrameSet>
</KeyFrameSet>
<OnClick motion:clickAction="transitionToStart"
motion:targetId="@id/button_animation_start" />
</Transition>
<ConstraintSet android:id="@+id/start">
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:layout_height="wrap_content"
android:layout_marginTop="492dp"
motion:layout_constraintTop_toTopOf="parent"
motion:layout_constraintHorizontal_bias="0.604"
motion:layout_constraintLeft_toLeftOf="parent"
motion:layout_constraintRight_toRightOf="parent"
android:layout_width="wrap_content"
android:id="@+id/imageView_test" />
</ConstraintSet>
</MotionScene>
こうしてためしにMotion Editorでアニメーションを作ってみましたとさ
大分アニメーション作りやすくなりましたね!
参考
https://android-developers.googleblog.com/2020/05/android-studio-4.html
https://developer.android.com/studio/write/motion-editor
関連記事:
- androidでDataBinding + ViewModel + LiveDataを使ってみた
- androidでDataBinding + ViewModel + LiveDataで双方向Bindingしてみた
- Androidで画像を指に沿って移動し離したら元の位置に戻す