2012-11-27 13 views
5

Przeczytałem wiele samouczków dotyczących animacji wierszy, ale wszystkie z nich opisują jak animować wybrany wiersz. Udało mi się to zrobić. Ale jest problem. Po usunięciu wiersza z animacją usuwam dane z adaptera i wywołuje funkcję notifyDataSetChanged(); Wiersze (poniżej usuniętego wiersza) idą w górę bez animacji. Jak mogę uzyskać animację tych wierszy? Chcę, żeby się płynnie przesuwały.ListView Animuj wiersze po usunięciu zaznaczonego wiersza

+1

Czy to działa? http://stackoverflow.com/a/6857762/832776 –

Odpowiedz

2

Usuń element listy na punkcie kliknięcia nadzieję, że to kod będzie pomocne,

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
        final int position, long id) { 
       // TODO Auto-generated method stub 
       Animation anim = AnimationUtils.loadAnimation(view.getContext(), 
         android.R.anim.slide_out_right); 
       anim.setDuration(500); 
       view.startAnimation(anim); 

       new Handler().postDelayed(new Runnable() { 

        public void run() { 

         strings.remove(position); 
         mAdapter.notifyDataSetChanged(); 

        } 

       }, anim.getDuration()); 

      } 
      }); 

UPDATE

Wystarczy pamiętać ramy architektury, która działa gdy notifydatasetChanged() jest wywoływana.

  1. Sposób getView nazywa
  2. Na wezwanie widzenia get, będzie rekonstruować wszystkie wiersze w widoku listy.

W twoim przypadku musimy animować metodę getView (która będzie ponownie wywoływana w akcji notifydatasetchanged). Oto rozwiązanie:

/** 
     * Hear strings is the data set 
     */ 
     @Override 
     public View getView(final int position, View convertView, 
       ViewGroup parent) { 
      final String str = this.strings.get(position); 
      final Holder holder; 

      if (convertView == null) { 
       convertView = mInflater.inflate(
         android.R.layout.simple_list_item_1, null); 
       convertView.setBackgroundColor(0xFF202020); 

       holder = new Holder(); 
       holder.textview = (TextView) convertView 
         .findViewById(android.R.id.text1); 
       holder.textview.setTextColor(0xFFFFFFFF); 

       convertView.setTag(holder); 
      } else { 
       holder = (Holder) convertView.getTag(); 
      } 

      holder.textview.setText(str); 

      Animation animation = null; 
      animation = new ScaleAnimation((float) 1.0, (float) 1.0, (float) 0, 
        (float) 1.0); 

      animation.setDuration(750); 
      convertView.startAnimation(animation); 
      animation = null; 

      return convertView; 
     } 

Sprawdź, czy to działa i daj mi znać, czy było to przydatne/pomocne.

+0

w swoim kodzie pokazujesz jak animować wybrany wiersz. W moim pytaniu mówię o animacji innych wierszy, gdy wybrana została usunięta. Chcę to po notifyDataSetChanged(); nazywa się wiersze w górę wraz z animacją. – Alex

+1

@Alexey, Proszę zobaczyć moją zaktualizowaną odpowiedź, Dzięki –

Powiązane problemy