Android: начать переход после завершения другого - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть переход, примененный к нескольким кнопкам, где я пытаюсь изменить их ширину с 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, все переходы происходят одновременно. Я хочу, чтобы они начали после окончания предыдущего .

Есть идеи, как этого добиться?

Ответы [ 3 ]

0 голосов
/ 14 апреля 2020

Я столкнулся с той же проблемой несколько дней go. Решение состоит в том, что вам нужно использовать разные переходы для разных представлений. Здесь вам нужно создать два перехода и использовать каждый из них только один раз. Попробуйте это

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));
            }
        }
    }
});
0 голосов
/ 14 апреля 2020

Мне удалось решить мою проблему с помощью 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;
                }
            }
        }
    });
0 голосов
/ 14 апреля 2020

Вместо этого следует использовать TransitionSet, чтобы вы могли настроить этот порядок как последовательный. Подробнее здесь и здесь в официальном Android документах

...