安卓系统:在另一个过渡结束后开始过渡



我对几个按钮进行了转换,试图将它们的宽度从0dp更改为MATCH_PARENT

final ChangeBounds transition = new ChangeBounds();
startFloat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for(i=0;i<allCards.size();i++) {
if(i%2 == 0) {
transition.setDuration(4000L);
TransitionManager.beginDelayedTransition(allCards.get(i), transition);
allButton.get(i).setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp10));
}
else{
transition.setDuration(400L);
TransitionManager.beginDelayedTransition(allCards.get(i), transition);
allButton.get(i).setLayoutParams(new MaterialCardView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp10));
}
}
}
});

注意:dp10是一个整数变量(没有问题(。

这似乎很好,但是,当我单击startFloat按钮时,所有的转换都会同时发生我希望它们在上一个结束后开始

你知道如何做到这一点吗?

您应该使用TransitionSet,这样您就可以将该顺序配置为顺序。更多详细信息在这里和这里的官方Android文档

几天前我也遇到过同样的问题。解决方案是,需要对不同的视图使用不同的过渡。您需要在这里创建两个转换,并且每个转换只使用一次。试试这个

final ChangeBounds firestTransition = new ChangeBounds();
final ChangeBounds secondTransition= new ChangeBounds();
startFloat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for(i=0;i<allCards.size();i++) {
if(i%2 == 0) {
firestTransition.setDuration(4000L);
TransitionManager.beginDelayedTransition(allCards.get(i), transition);
allButton.get(i).setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp10));
}
else{
secondTransition.setDuration(400L);
TransitionManager.beginDelayedTransition(allCards.get(i), transition);
allButton.get(i).setLayoutParams(new MaterialCardView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp10));
}
}
}
});

我使用transition.setStartDelay(delay)解决了我的问题。

这是我的代码:

final ChangeBounds transition = new ChangeBounds();
startFloat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for(int i=0;i<allCards.size();i++) {
if(i%2 == 0) {
transition.setDuration(4000L);
transition.setStartDelay(delay);
TransitionManager.beginDelayedTransition(allCards.get(i), transition);
allButton.get(i).setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp10));
delay+=4000;
}
else{
transition.setDuration(400L);
transition.setStartDelay(delay);
TransitionManager.beginDelayedTransition(allCards.get(i), transition);
allButton.get(i).setLayoutParams(new MaterialCardView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp10));
delay+=400;
}
}
}
});

最新更新