ListView
に新しく追加されたアイテムをアニメーション化するにはどうすればよいですか?
adapter
があり、リストに新しいアイテムを追加すると、adapter.notifyDataSetChanged();
と言います。アイテムが追加されると、すべてが完全に機能しますが、問題は、新しく追加された要素にアニメーションを持たせたいことです。
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
を達成します。
Androidのアニメーションに関する公式ドキュメントには、Android:animateLayoutChanges = "true"を使用して、レイアウトが変更されるたびにトリガーするアニメーションを設定できると記載されています。
取得元: http://developer.Android.com/training/animation/layout.html
この種のアニメーションを追加することは、私が最初に考えたよりも難しいです。達成しようとしているアニメーションの種類に応じて、2つの方法があります。
LayoutAnimationController を使用します。 APIデモ に例があります。
各View
のアニメーション:
これはかなりのハックですが、ListView
の子にアニメーションを追加するために私が見つけた唯一の方法は次のとおりです。
削除するアイテムのIDをアダプターに通知して、adapter.notifyDataSetChanged();
を呼び出すことができます。これにより、アダプタのgetView()
メソッドへの呼び出しが生成されます。その中であなたは次のようなことをすることができます:
_if ( item.getId() == itemToRemove ) {
//apply the animation
}
_
アニメーションが終了したら、adapter.notifyDataSetChanged()
を呼び出してすべてを配置できます。