2012-11-27 14 views
5

Ho letto un sacco di tutorial sull'animazione delle righe, ma tutte descrivono come animare la riga selezionata. Sono riuscito a farlo. Ma c'è un problema. Quando la riga viene rimossa con un'animazione, rimuovo i dati dall'adattatore e richiama notifyDataSetChanged(); Le righe (sotto la riga rimossa) salgono senza animazione. Come posso ottenere l'animazione di queste righe? Voglio che scivolino senza intoppi.ListView animare le righe dopo aver rimosso una riga selezionata

+1

Funziona? http://stackoverflow.com/a/6857762/832776 –

risposta

2

Rimuovere la voce di lista sulla voce click, spero che questo codice sarà utile per voi

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

Basta tenere a mente il quadro dell'architettura che funziona quando viene chiamata la notifydatasetChanged().

  1. Il metodo si chiama GetView
  2. Sulla chiamata di vista get, si ricostruirà tutte le righe per la visualizzazione elenco.

Nel tuo caso, dobbiamo animare il metodo getView (che deve essere richiamato nuovamente sull'azione del notifydatasetchanged). Ecco la soluzione:

/** 
     * 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; 
     } 

Verificare se funziona e fammi sapere se è stato utile/utile.

+0

nel codice mostra come animare la riga selezionata. Nella mia domanda, sto parlando dell'animazione di altre righe quando quella selezionata è stata rimossa. Lo voglio dopo notifyDataSetChanged(); è chiamato le righe salgono con l'animazione. – Alex

+1

@Alexey, vedere la mia risposta aggiornata, grazie –

Problemi correlati