在使用TransitionManager.beginDelayedTransition(...)之前准备布局更改

时间:2018-11-05 10:49:52

标签: android animation

问题:是否可以通过立即移动(n个不可见的)视图而没有任何动画并将其设置为动画的其他位置来对用户事件做出反应(例如单击)? (API降至21,因此TransitionManager.endTransitions()无效)

背景:我通过ConstraintSet与TransitionManager.beginDelayedTransition的组合尝试了此操作。

通常,迭代语言中任何语句的位置都很重要。对于TransitionManager.beginDelayedTransition(...)则不是这样。如果我写

// Preq: button is pinned to START,TOP and END of parent and has a fixed width and height!
// change should not be animated (button goes to mid of screen)
ConstraintSet set = new ConstraintSet();
set.clone(layout);
set.connect(buttonID, ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP);
set.connect(buttonID, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM);
set.applyTo(layout);
// this change below should be animated (button goes from mid to bottom of screen)
TransitionManager.beginDelayedTransition(layout);
ConstraintSet setPast = new ConstraintSet();
setPast.clone(layout);
setPast.clear(buttonID, ConstraintSet.TOP);
setPast.applyTo(layout);

在该按钮的OnClickListener内,我想,第一个layoutchange会在没有任何动画的情况下处理。在这些布局更改之后,将使用布局快照进一步制作动画。这应该使按钮(挂在屏幕的顶部边框)立即在屏幕中间弹出,以使其向下动画。不幸的是,情况并非如此,按钮从上到下一直向下滑动。我的测试使我假设以后的applyTo与第一个结合在一起。

PS:这只是一个玩具示例,我需要这种机制来移动(不可见)视图,以准备通过用户单击(取决于其位置)触发的动画。

0 个答案:

没有答案