我观看了Android开发者的视频,了解如何在YouTube上插入和删除ListView动画。这些代码中包含非常复杂的代码,我尝试搜索其他内容并找到了它。
http://karnshah8890.blogspot.fi/2013/04/listview-animation-tutorial.html
它具有非常简单的实现,适用于大多数部分。我的问题是,当我在提供给ArrayAdapter的ArrayList中插入一个新项时,由于adapter.notifyDataSetChanged()
而导致所有现有元素重新插入......我想。当我在ListView中插入一个条目时,如何防止所有条目再次动画?我只想让新的动画进入。
我在代码中使用我的ListView:
toggles = (ListView) v.findViewById(R.id.toggleListView);
adapter = new ToggleListAdapter(getActivity(), toggleTasks);
toggles.setAdapter(adapter);
插入新项目后,我更新ArrayList(toggleTasks
),然后在适配器上调用notifyDataSetChanged()
。
toggleTasks.add(task);
adapter.notifyDataSetChanged();
这是ArrayAdapter中的getView()
方法。
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ToggleTask task = toggles.get(position);
String startActionName = "";
String finishActionName = "";
int imageDrawableId = -1;
// Deleted the part where I get the values for those three variables above
final Holder holder;
if(convertView == null) {
convertView = inflater.inflate(R.layout.mute_toggles_toggle_view, null);
holder = new Holder();
holder.image = (ImageView) convertView.findViewById(R.id.image);
holder.startAction = (TextView) convertView.findViewById(R.id.startAction);
holder.finishAction = (TextView) convertView.findViewById(R.id.finishAction);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
holder.image.setImageResource(imageDrawableId);
holder.startAction.setText(startActionName);
holder.finishAction.setText(finishActionName);
Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.listview_push_left_in); // Third animation example on the site linked earlier
animation.setDuration(500);
convertView.startAnimation(animation);
animation = null;
return convertView;
}
答案 0 :(得分:1)
在getView中更改此内容
if(changedIndex == position){
Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.listview_push_left_in); // Third animation example on the site linked earlier
animation.setDuration(500);
convertView.startAnimation(animation);
animation = null;
}
然后改变
toggleTasks.add(task);
adapter.notifyDataSetChanged();
到
toggleTasks.add(task);
toggles.getPosition(task);
adapter.notifyDataSetChanged();
*我没有检查过这些代码,但我相信它应该可行
答案 1 :(得分:1)
如果你想animate
只插入last item
,那么在设置动画之前检查它是否是List
中的最后一项。
if (position == getCount() - 1) {
Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.listview_push_left_in); // Third animation example on the site linked earlier
animation.setDuration(500);
convertView.startAnimation(animation);
animation = null;
}
答案 2 :(得分:1)
使用ListViewAnimations库。设置ListView
和ListAdapter
之后:
MyListAdapter mAdapter = new MyListAdapter(this, getItems());
SwingRightInAnimationAdapter swingRightInAnimationAdapter = new SwingRightInAnimationAdapter(mAdapter);
// Assign the ListView to the AnimationAdapter and vice versa
swingRightInAnimationAdapter.setAbsListView(getListView());
getListView().setAdapter(swingRightInAnimationAdapter);
稍微调用AnimationAdapter.setShouldAnimateFromPosition(int position)
:
swingRightInAnimationAdapter.setShouldAnimateFromPosition(swingRightInAnimationAdapter.getCount());
swingRightInAnimationAdapter.add(myItem);
有关如何使用该库的更多信息,请查看wiki。