2012-11-27 8 views
5

行のアニメーションについて多くのチュートリアルを読みましたが、選択された行をアニメーション化する方法について説明しています。私はそれをすることができた。しかし、そこに問題があります。アニメーションで行が削除されると、アダプタからデータが削除され、notifyDataSetChanged()が呼び出されます。削除された行の下にある行はアニメーションなしで表示されます。これらの行のアニメーションをどのように達成できますか?私は彼らがスムーズに滑り落ちるようにしたい。選択された行が削除された後のリストビューのアニメーション

+1

これは機能しますか?コード内にhttp://stackoverflow.com/a/6857762/832776 –

答えて

2

アイテムをクリックしたときに、リスト項目を削除し、あなた

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

のための希望、このコードは意志役立つだけで心の中でnotifydatasetChanged()が呼び出されたときに機能アーキテクチャフレームワークを保ちます。

  1. GetViewメソッドがGETビューの呼び出しで
  2. と呼ばれ、それは、リストビューのすべての行を再構築します。

あなたの場合、私たちはgetViewメソッドをアニメーション化する必要があります(これはnotifydatasetchangedのアクションで再度呼び出されます)。解決方法は次のとおりです。

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

有用かどうかをご確認ください。

+0

を追加すると、選択した行をアニメーション化する方法が示されます。私の質問では、選択されたものが削除されたときに他の行のアニメーションについて話していました。私はnotifyDataSetChanged()の後にそれをしたい。行はアニメーションで表示されます。 – Alex

+1

@Alexey、私の更新答えを見てください、ありがとう –

関連する問題