2013-05-11 4 views
5

У меня довольно странная проблема с анимацией в моем проекте. На скриншотах, размещенных ниже, вы можете четко видеть, как карта Totals оставляет какой-то след при анимации. Эта проблема воспроизводится на складе Nexus 7 4.2.2. У карты Totals есть анимация в стиле Google Now. Важно отметить, что контейнер для карты Totals - это фрагмент, меню слева в скриншоте пейзажа - это другой фрагмент, а нижние - часть действия, к которому прикреплены фрагменты.Android Анимация, оставляющая артефакты

Landscape Screenshot

Portrait screenshot

Я не могу показаться, чтобы найти решение в Интернете, я попытался setFillAfter «истинный» и компенсируя начало анимации. След в кнопках «Действия» внизу («Предыдущие &« Далее ») исчезает при нажатии одной из кнопок.

Вот код в onCreateView фрагмента Totals:

final View view = inflater.inflate(R.layout.fragment_totals, 
      container, false);  

    Fonts.setRobotoThinFont(getActivity(), view); 

    final LinearLayout mContainer = (LinearLayout) 
      view.findViewById(R.id.container); 

    final View mCard = inflater 
      .inflate(R.layout.view_simpletotal, mContainer, false); 

    Animation animation = AnimationUtils.loadAnimation(getActivity(), 
      R.anim.card_animation); 

    mContainer.addView(mCard); 

    mCard.startAnimation(animation); 

    return view; 

Любая помощь будет высоко ценится!

+1

Вы пытались аннулировать весь контейнер активности при завершении анимации? –

+0

Это избавится от этого, спасибо вам большое! Делает ли это считается «хорошей практикой»? –

+0

Ну, я думаю, вам лучше использовать фрагментацию пользовательских анимаций, как показано в официальных ссылках (кажется, вы анимируете весь фрагмент, не так ли?) Http://developer.android.com/training/animation/cardflip.html –

ответ

3

Вы можете легко избавиться от него, просто аннулируя действие контейнера при завершении анимации.

2

Предлагаю вам использовать метод setLayoutAnimation() класса ViewGroup. Я думаю, это поможет вам.
Например, вы можете написать этот код в ваш класс фрагмент:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    ... 
    rootView.setLayoutAnimation(getLayoutAnimation()); 
    ... 
} 
private LayoutAnimationController getLayoutAnimation() { 
    Animation animation = new RotateAnimation(30, 0, -100, 0); 
    animation.setDuration(1000); 
    LayoutAnimationController layoutAnimationController = new LayoutAnimationController(animation); 
    return layoutAnimationController; 
} 

посмотреть, что будет с анимацией.

+0

Спасибо за ответ! Я оживляю вид внутри фрагмента, а не сам фрагмент, но ваш ответ может помочь мне с другой несвязанной проблемой. Спасибо за вход! –

+1

Этот пример работает точно для представлений. Вы можете применить это к любому объекту ViewGroup, который вы хотите. Для вашего примера вы можете поместить белый блок с деталями Totals в некоторую ViewGroup, а затем применить анимацию, которую я предложил. Если будут проблемы с запущенной анимацией, сделайте параметры макета для этой ViewGroup как MATCH_PARENT. Вы можете прочитать здесь: [ссылка] http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html – Anatolii

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