Android :在另一个转换结束后开始转换
Android : Start a transition after another one ends
我对几个按钮应用了过渡,我尝试将它们的宽度从 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 文档
中有更多详细信息 here and here
几天前我遇到了同样的问题。解决办法是,你需要对不同的view使用不同的transitions。您需要在此处创建两个过渡,并且每个过渡只使用一次。试试这个
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;
}
}
}
});
我对几个按钮应用了过渡,我尝试将它们的宽度从 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 文档
几天前我遇到了同样的问题。解决办法是,你需要对不同的view使用不同的transitions。您需要在此处创建两个过渡,并且每个过渡只使用一次。试试这个
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;
}
}
}
});