2013-05-11 14 views
5

Mam dość dziwny problem z animacją w moim projekcie. W zrzutach ekranu zamieszczonych poniżej możesz wyraźnie zobaczyć kartę Totals, pozostawiając jakiś ślad po animacji. Ten problem jest powtarzalny na magazynie Nexus 7 z 4.2.2. Karta Totals ma animację w stylu Google Now. Ważne jest, aby zauważyć, że kontenerem dla karty Sumy jest Fragment, Menu po lewej stronie ekranu zrzutu ekranu to inny Fragment, a dolne przyciski są częścią Aktywności, do której są dołączone Fragmenty.Animacja Androida pozostawiając artefakty

Landscape Screenshot

Portrait screenshot

I nie wydaje się znaleźć rozwiązanie w Internecie, próbowałem setFillAfter "true" i potrącenie początek animacji. Ścieżka w przyciskach aktywności na dole ("Poprzedni &" Następny) znika po naciśnięciu jednego z przycisków.

Oto kod w onCreateView fragmentu sumy:

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; 

Każda pomoc będzie bardzo mile widziana!

+1

Czy próbujesz unieważnić cały kontener aktywności po zakończeniu animacji? –

+0

To się go pozbędzie, dziękuję bardzo! Czy uważa to za "dobrą praktykę"? –

+0

Cóż, myślę, że powinieneś lepiej używać niestandardowych animacji fragmentów, jak pokazano w oficjalnych odnośnikach (wydaje się, że animujesz cały fragment, prawda?) Http://developer.android.com/training/animation/cardflip.html –

Odpowiedz

3

Możesz łatwo się go pozbyć, po prostu unieważniając działanie kontenera po zakończeniu animacji.

2

Proponuję użyć metody setLayoutAnimation() z klasy ViewGroup. Myślę, że to ci pomoże.
Na przykład, można napisać ten kod wewnątrz klasy fragmentu:

@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; 
} 

zobaczyć, co się stało z animacją.

+0

Dzięki za odpowiedź! Animuję Widok wewnątrz Fragmentu, a nie samego Fragmentu, ale twoja odpowiedź może mi pomóc z innym niezwiązanym problemem. Dzięki za wejście! –

+1

Ten przykład działa dokładnie dla widoków. Możesz zastosować to do dowolnego obiektu ViewGroup, który chcesz. Na przykład możesz umieścić biały blok ze szczegółami Sumy w jakiejś grupie ViewGroup, a następnie zastosować animację, którą zaproponowałem. Jeśli wystąpią pewne problemy z uruchomioną animacją, uczyń parametry układu dla tej grupy View jako MATCH_PARENT. Możesz przeczytać więcej tutaj: [link] http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html – Anatolii