问题描述
我在XML中有两个运动布局。一个是父母,一个是孩子。
从XML动画开始动画时,它可以工作。但是,当使用代码动态启动相同的运动布局时,不会显示该视图,但是日志中的动画显示该视图已完成。 可能是什么问题?
@Override
public void onTransitionCompleted(MotionLayout motionLayout,int currentId) {
switch (currentId) {
case R.id.endHomeLaunch:
motionLayout.setTransition(R.id.expanded,R.id.collapsed);
motionLayout.setProgress(0);
motionLayoutFloatButton.setTransition(R.id.startFloat,R.id.endFloat);
motionLayoutFloatButton.setTransitionDuration(1000);
motionLayoutFloatButton.transitionToEnd();
break;
由于我的父级布局具有滑动动画,因此我无法添加点击动画,因为这会增加布局动画中的错误。唯一的选择是创建两个单独的运动布局场景。
解决方法
这通常是由于运动布局无法在主线程上正确排队造成的。我刚刚解决了一个类似的问题,解决方案似乎是协程,即在一个片段中,你会这样做:
lifecycleScope.launchWhenStarted {
delay(50) //pause to allow other views to initialize
motionLayout.setTransition(R.id.myTransition)
motionLayout.transitionToEnd()
}