Listview 项目动画在滚动时停止

Posted

技术标签:

【中文标题】Listview 项目动画在滚动时停止【英文标题】:Listview items Animation Stop While Scrolling 【发布时间】:2014-07-14 15:12:04 【问题描述】:

我正在尝试为每个 ListView 项目显示 ProgressBar 一个简单的动画,但是 当我滚动时,ProgressBar 动画停止。滚动结束后,动画再次开始。 见下图。

(来源:axgig.com)

【问题讨论】:

对于接近投票,因为不清楚 OP 在问什么,我认为相反很明显。他想知道滚动发生时如何保持进度条动画。 【参考方案1】:

您必须在 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;

【讨论】:

【参考方案2】:

我在我的适配器中使用了这个语法并且问题解决了!

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) 


谢谢。

【讨论】:

【参考方案3】:

它正在停止,因为当列表项可见时会一次又一次地调用 getview,从而重置视图以避免设备上的任何帧跳过/滞后..

您需要做的是创建一个带有布尔值的视图持有者并将其设置为视图的标签。每次动画停止时布尔值应该为真和假。所以当调用 getview 时,您的进度条动画仍然根据布尔值开始或停止..

【讨论】:

以上是关于Listview 项目动画在滚动时停止的主要内容,如果未能解决你的问题,请参考以下文章

ListView 项目滚动动画(类似“UIKit Dynamics”)

当代表具有不同的宽度时,QML ListView 滚动不会产生任何动画

c#listview添加控件时不显示滚动条

Flutter中如何检测ListView的滚动位置

GridView的滚动速度在停止时很慢

当您一直滚动到 ListView.builder 的顶部时,如何禁用动画