我正在尝试为每个ListView
项显示一个简单的动画,来展示ProgressBar
,但是当我滚动时,ProgressBar
的动画会停止。当滚动结束后,动画又重新开始了。请参见下面的图片。
(来源: axgig.com)
你必须在getView()方法中使用动画,并为convertView设置动画 例如:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
StructureArticles item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.adapter_articles, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
Animation animationListView = AnimationUtils.loadAnimation(context, R.anim.scale_fade_in);
convertView.startAnimation(animationListView);
return convertView;
}
我在适配器中使用了这个语法,问题得到解决!
public class AdapterDownload extends ArrayAdapter<StructDownload> {
public AdapterDownload(ArrayList<StructDownload> array) {
super(G.context, R.layout.item_layout, array);
}
private static class ViewHolder {
public ViewHolder(View view)
{
}
public void fill(final ArrayAdapter<StructDownload> adapter, final StructDownload item, final int position)
{
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
}
}
谢谢。
它会停止是因为当列表项可见时,getview被反复调用,从而重置视图以避免设备上的任何帧跳过/延迟。
你需要做的是创建一个带有布尔值的视图持有者,并将其设置为视图的标记。每次动画时布尔值应该为true,停止时为false。所以当getview被调用时,你的进度条动画仍在开始或停止,具体取决于布尔值。