首页 > 解决方案 > 使用 ConstraintSet 输入动画

问题描述

我想使用 ConstraintSet 为活动制作输入动画,如以下视频所示: https ://www.youtube.com/watch?v=OHcfs6rStRo 。

问题是我不知道在哪个生命周期方法中放置代码以使转换对用户可见。

在 onCreate 我打电话:

setContentView(R.layout.layout_first_keyframe_detail);
topConstraintLayout = findViewById(R.id.top_constraint_layout);
constraintSet = new ConstraintSet();
constraintSet.clone(this, R.layout.layout_detail_top);

然后我想打电话:

TransitionManager.beginDelayedTransition(topConstraintLayout);
constraintSet.applyTo(topConstraintLayout);

当活动已经可见时。不幸的是,我没有找到任何生命周期方法来做到这一点。

标签: androidanimation

解决方案


如果您查看TransitionManager.beginDelayedTransiton()实现,您会发现它从以下检查开始: if (!sPendingTransitions.contains(sceneRoot) && sceneRoot.isLaidOut()) 查看 isLaidOut() 文档将使您了解必须至少绘制一次视图才能执行动画:

如果此视图自上次附加到窗口或从窗口分离后至少经过一个布局,则返回 true。

但是,将动画启动包装在一条消息中对我有用。所以你应该尝试这样做:

myView.post{ 
    TransitionManager.beginDelayedTransition(topConstraintLayout);
    constraintSet.applyTo(topConstraintLayout);
}

推荐阅读