在ListView中为新添加的项目添加animation

如何在ListView新添加的项目设置animation

我有一个adapter ,当我在列表中添加新项目时,我说adapter.notifyDataSetChanged(); 项目被添加,一切都很完美,但我的问题是我想要新添加的元素有一些animation。

Custom AdaptergetView()方法中为每个添加的元素设置Animate

 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中关于animation的官方文档说,你可以使用android:animateLayoutChanges =“true”设置animation,以便在布局发生变化时触发。

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

添加这种animation比我想象的更难。 根据您尝试实现的animationtypes,有两种方式。

  • 使用LayoutAnimationController 。 API演示中有一个示例。

  • animation每个View

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

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

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

animation结束后,您可以调用adapter.notifyDataSetChanged()来放置所有内容。