web-dev-qa-db-ja.com

ListViewで新しく追加されたアイテムをアニメーション化する

ListViewに新しく追加されたアイテムをアニメーション化するにはどうすればよいですか?

adapterがあり、リストに新しいアイテムを追加すると、adapter.notifyDataSetChanged();と言います。アイテムが追加されると、すべてが完全に機能しますが、問題は、新しく追加された要素にアニメーションを持たせたいことです。

13
Lukap

Animate _Custom Adapter_のgetView()メソッドに追加された各要素。

_public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;

    if (v == null) {
        LayoutInflater vi = (LayoutInflater) getActivity()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.simple_list_item_1, null);
    }

    ListData o = list.get(position);
    TextView tt = (TextView) v.findViewById(R.id.toptext);

    tt.setText(o.content);

    Log.d("ListTest", "Position : "+position);
    if(flag == false) {
        Animation animation = AnimationUtils
                .loadAnimation(getActivity(), R.anim.slide_top_to_bottom);
        v.startAnimation(animation);
    }
    return v;
}
_

そしてそれによってAnimationを達成します。

25
ASH

Androidのアニメーションに関する公式ドキュメントには、Android:animateLayoutChanges = "true"を使用して、レイアウトが変更されるたびにトリガーするアニメーションを設定できると記載されています。

取得元: http://developer.Android.com/training/animation/layout.html

7
René M

この種のアニメーションを追加することは、私が最初に考えたよりも難しいです。達成しようとしているアニメーションの種類に応じて、2つの方法があります。

これはかなりのハックですが、ListViewの子にアニメーションを追加するために私が見つけた唯一の方法は次のとおりです。

削除するアイテムのIDをアダプターに通知して、adapter.notifyDataSetChanged();を呼び出すことができます。これにより、アダプタのgetView()メソッドへの呼び出しが生成されます。その中であなたは次のようなことをすることができます:

_if ( item.getId() == itemToRemove ) {
 //apply the animation
}
_

アニメーションが終了したら、adapter.notifyDataSetChanged()を呼び出してすべてを配置できます。

5
Macarse