如何在ListView
中为新添加的项目制作动画?
我有adapter
,当我在列表中添加新项目时,我说adapter.notifyDataSetChanged();
项目已添加,一切正常,但我的问题是我想要新添加的元素来制作动画。
答案 0 :(得分:24)
Animate
您getView()
的{{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)
添加这种动画比我想象的要难。根据您尝试实现的动画类型,有两种方式。
使用LayoutAnimationController。 API demos中有一个例子。
动画每个View
:
这是一个非常黑客,但我发现向ListView
的孩子添加动画的唯一方法如下:
您可以尝试通知适配器您要删除的项目的ID,并调用adapter.notifyDataSetChanged();
。这将生成对适配器的getView()
方法的调用。在里面你可以做类似的事情:
if ( item.getId() == itemToRemove ) {
//apply the animation
}
动画结束后,您可以回想起adapter.notifyDataSetChanged()
来放置所有内容。