2015-06-05 2 views
4

Я использую TransitionManager.beginDelayedTransition, очерченный here , чтобы оживить два вида, заменяя позиции в RelativeLayout. Я делаю это, просто заменяя RelativeLayout.LayoutParams двух двух видов.Android: Могу ли я слушать обновления анимации с помощью TransitionManager.beginDelayedTransition?

Мой вопрос заключается в том, как контролировать анимацию, которая автоматически создается и выполняется TransitionManager, без необходимости создавать собственные пользовательские переходы. Мне нужно определить, когда анимация закончилась, чтобы я мог внести изменения в просмотренные представления.

Ниже приведен метод, который заменяет два вида. CollageCanvasAperture является расширением View, а mApertureGroup - RelativeLayout, который содержит эти представления.

private void shuffle(int fromApertureInd, int toApertureInd) { 
    final CollageCanvasAperture fromV = (CollageCanvasAperture) mApertureGroup.getChildAt(fromApertureInd); 
    final CollageCanvasAperture toV = (CollageCanvasAperture) mApertureGroup.getChildAt(toApertureInd); 

    if (null == fromV || null == toV) { 
     return; 
    } 

    TransitionManager.beginDelayedTransition(mApertureGroup); 

    RelativeLayout.LayoutParams fromLP = (RelativeLayout.LayoutParams) fromV.getLayoutParams(); 
    RelativeLayout.LayoutParams toLP = (RelativeLayout.LayoutParams) toV.getLayoutParams(); 

    fromV.setLayoutParams(toLP); 
    toV.setLayoutParams(fromLP); 
} 

Я сделал несколько часов поиска здесь и расчесывать через TransitionManager код, но не может видеть, как обнаружить изменения. Я предпочел бы, чтобы иметь возможность обнаруживать конец анимации в CollageCanvasAperture, но не может видеть, что соответствующие слушатели применяют.

Я предполагаю, что я мог бы предоставить представление с помощью LayoutParams назначения до того, как анимация будет выполнена, и тогда вид может прослушивать размер & изменений местоположения, пока они не совпадут ...?

ответ

7

Итак, оказалось, что добавить эти прослушиватели к этим «автоматическим» переходам довольно просто.

Вместо использования: TransitionManager.beginDelayedTransition(mApertureGroup); вам нужно работать, какой автоматический переход в настоящее время, используя при вызове beginDelayedTransition и вызовите TransitionManager.go() вместо этого.

Мои просмотры переключений использовали ChangeBounds Переход. После того, как это было знать все, что я должен был сделать:

ChangeBounds mySwapTransition = new ChangeBounds(); 
    mySwapTransition.addListener(new Transition.TransitionListener() { 
     @Override 
     public void onTransitionStart(Transition transition) { } 

     @Override 
     public void onTransitionEnd(Transition transition) { } 

     @Override 
     public void onTransitionCancel(Transition transition) {} 

     @Override 
     public void onTransitionPause(Transition transition) { } 

     @Override 
     public void onTransitionResume(Transition transition) { } 
    }); 

    TransitionManager.go(new Scene(mApertureGroup), mySwapTransition); 
+3

Вы также можете использовать '= переход Автоматическая смена слайда новый Автоматическая смена слайда();', если вы хотите использовать по умолчанию переходы например. движущиеся виды –

Смежные вопросы