【发布时间】:2014-03-21 15:21:28
【问题描述】:
我在 Android ListFragment 中使用 ListView 并使用 ViewHolder 模式来提高滚动性能。我的 ListAdapter 的关键部分如下所示:
public View getView(int position, View convertView, ViewGroup parentGroup) {
View resultView;
Data data = dataList.get(position);
if (convertView == null) {
resultView = inflateView(parentGroup);
ViewHolder viewHolder = getViewHolder(position, resultView);
resultView.setTag(viewHolder);
viewHolder.fillView(data);
} else {
ViewHolder viewHolder = (ViewHolder) convertView.getTag();
viewHolder.fillView(data);
resultView = convertView;
}
resultView.startAnimation(fadeInAnimation);
return resultView;
}
问题是由动画引起的:如果我非常缓慢滚动,新视图会按应有的方式淡入。但是一旦我滚动得更快,动画就会在之前出现的几个项目上重新开始。
例如,假设一个包含这 10 个项目中的 20 个项目的列表是可见的。如果我向下滚动 5 个项目,则每次出现这些新项目时,项目 11、12、13、14 和 15 都会动画。 (所以 11 动画 5 次,项目 12 动画 4 次等等)
我认为这是因为所有这些项目都使用了 convertView,所以动画确实会在所有项目上开始。
是否有可能在使用 ViewHolders 时仅对出现的视图进行动画处理?
提前致谢,麦克法兰
【问题讨论】:
-
更多信息在这里:AbsListView.OnScrollListener
标签: android listview animation