Android - 将动画设置为ListView中的各个项目

时间:2014-08-11 03:49:57

标签: android android-listview android-animation

我尝试使用以下代码在我的ListView项目中实现(类似Google+)动画的幻灯片底部。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if(convertView == null) {
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.row_layout, null);
    }

    convertView.setVisibility(View.INVISIBLE);

    //Setting values to list items.

    convertView.startAnimation(AnimationUtils.loadAnimation(context, R.anim.abc_slide_in_bottom));
    convertView.setVisibility(View.VISIBLE);

    return convertView;
}

动画正在运行,列表项从底部推送。但问题是,当我向下滚动时,顶部已有的项目重复动画,看起来很奇怪。当我向上滚动时,动画再次重复。我很确定这不是实现这个动画的正确方法。有没有办法在不使用任何库的情况下实现它?

编辑:我从BaseAdapter扩展到实现适配器。

1 个答案:

答案 0 :(得分:2)

如果您只希望动画仅在向下滚动时起作用,则需要检测是否向下滚动列表视图并启动动画。

<强>样品:

BaseAdapter

中创建全局 lastPosition实例
int lastPosition;

使用lastPosition后检测你是否向下或向上滚动

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if(convertView == null) {
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.row_layout, null);
    }

    //if scroll down then play animation
    if(position <= lastPosition)
       convertView.startAnimation(AnimationUtils.loadAnimation(context, R.anim.abc_slide_in_bottom));

    convertView.setVisibility(View.INVISIBLE);    

    convertView.setVisibility(View.VISIBLE);

    lastPosition = position;

    return convertView;
}