【发布时间】:2020-10-09 18:01:25
【问题描述】:
是否可以暂停 Motion 布局转换然后恢复此转换?(例如,我显示对话框片段,我需要暂停此运动场景,并且在关闭对话框后我想恢复转换)
我通过 MotionLayout.setTransitionToEnd() 之类的代码启动转换
【问题讨论】:
标签: android android-motionlayout
是否可以暂停 Motion 布局转换然后恢复此转换?(例如,我显示对话框片段,我需要暂停此运动场景,并且在关闭对话框后我想恢复转换)
我通过 MotionLayout.setTransitionToEnd() 之类的代码启动转换
【问题讨论】:
标签: android android-motionlayout
您应该能够获得当前进度并设置为该值...然后当您准备好恢复时,您可以再次调用 transitionToEnd() 它将从该值恢复...例如
private void pauseAnimation() {
float currentProgress = motionLayout.getProgress()
motionLayout.setProgress(currentProgress())
}
private void resumeAnimation() {
motionLayout.transitionToEnd()
}
这应该做你想要完成的事情
【讨论】:
我在 MotionLayout 类 setProgress(float) 和 setInterpolatedPreogress(float) https://developer.android.com/reference/android/support/constraint/motion/MotionLayout.html#setProgress(float) 中找到了公共方法
https://developer.android.com/reference/android/support/constraint/motion/MotionLayout.html#setInterpolatedProgress(float)
允许恢复动画
【讨论】:
您可以像这样在暂停片段之前存储您离开的进度位置:
private var outState: Bundle? = null
const val KEY_CURRENT_POSITION_LIST_CATEGORY = "KEY_CURRENT_POSITION_LIST_CATEGORY"
override fun onPause() {
super.onPause()
outState = Bundle()
outState!!.putFloat(KEY_CURRENT_POSITION_LIST_CATEGORY, motion_layout.progress)
}
还有onResume,你可以在motion_layout中设置动画的进度
override fun onResume() {
super.onResume()
if (outState != null) {
motion_layout.progress=outState!!.getFloat(KEY_CURRENT_POSITION_LIST_CATEGORY)
}
}
【讨论】: