2

我有一个ListView扩展它的适配器类BaseAdapter

我想为列表视图中的一个小自定义部分设置动画。

我有从右到左滑动的部分动画 - 这第一次效果很好。

为简洁起见,在 Adapter 的方法中,类似于所示:

public View getView(){

    Animation an = AnimationUtils.loadAnimation(mContext, R.anim.transladar);
    an.reset();
    vi.startAnimation(an);
    return vi;
}

看起来不错,但是当我再添加一个项目 chatAdapter.notifyDataSetChanged();时,会触发它刷新我的所有项目并重新启动动画。

我只想为适配器本身的最后一项设置动画。

我希望你能帮助我。

4

2 回答 2

5

您可以添加公共布尔变量(isFirstTime = true;)并在您的getView()检查中像这样

if(isFirstTime){
    Animation an = AnimationUtils.loadAnimation(mContext, R.anim.transladar);
    an.reset();
    vi.startAnimation(an);

   if(position == getCount()-1) isFirstTime =false;
}else{
  if(position == getCount()-1){
     Animation an = AnimationUtils.loadAnimation(mContext, R.anim.transladar);
    an.reset();
    vi.startAnimation(an);
   }

}

注意:这是快速解决方案,我不知道是否有其他方法。

希望这对您有所帮助。

于 2013-04-02T22:23:06.100 回答
0

您可以检查 convertview 是否为空,然后准备动画。经过测试并为我工作:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (null == convertView) {
        convertView = LayoutInflater.from(getActivity()).inflate(
                R.layout.workshop_components_list_item, null);
    }

    Animation animation = null;
    ViewHolder holder = (ViewHolder) convertView.getTag();
    if (null == holder) {
        holder = new ViewHolder();
        holder.name = (TextView) convertView.findViewById(R.id.textView_listItemName);
        holder.position = position;
        animation = AnimationUtils.loadAnimation(getActivity(), R.anim.components_list_item);
        animation.setDuration(500);
    }

    ListItem item = getItem(position);
    holder.name.setText(item.getName());

    if (null != animation) {
        convertView.startAnimation(animation);
        animation = null;
    }

    return convertView;
}
于 2014-10-27T10:59:18.913 回答