在ListView中为新添加的项目添加动画

时间:2011-06-07 11:54:58

标签: android listview animation adapter

如何在ListView中为新添加的项目制作动画?

我有adapter,当我在列表中添加新项目时,我说adapter.notifyDataSetChanged();项目已添加,一切正常,但我的问题是我想要新添加的元素来制作动画。

3 个答案:

答案 0 :(得分:24)

AnimategetView()的{​​{1}}方法中添加了每个元素。

Custom Adapter

从而实现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; }

答案 1 :(得分:7)

关于Android动画的官方文档说,你可以设置一个动画,以便在布局发生变化时触发,使用 android:animateLayoutChanges =“true”

取自:http://developer.android.com/training/animation/layout.html

答案 2 :(得分:5)

添加这种动画比我想象的要难。根据您尝试实现的动画类型,有两种方式。

这是一个非常黑客,但我发现向ListView的孩子添加动画的唯一方法如下:

您可以尝试通知适配器您要删除的项目的ID,并调用adapter.notifyDataSetChanged();。这将生成对适配器的getView()方法的调用。在里面你可以做类似的事情:

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

动画结束后,您可以回想起adapter.notifyDataSetChanged()来放置所有内容。