Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView项目在滚动后设置动画_Android_Android Listview_Android Animation - Fatal编程技术网

Android ListView项目在滚动后设置动画

Android ListView项目在滚动后设置动画,android,android-listview,android-animation,Android,Android Listview,Android Animation,我的问题: 在我开始滚动后,ListView中的一个项目会显示动画。这不是最后一项,动画应该完成。问题解决后,我滚动一次,它只会在列表中的单个项目上发生一次 在开始滚动ListView后,如何停止单个项目的动画制作 我希望在将项目添加到适配器时,动画只运行一次 我有一个列表适配器,当项目添加到列表中时,我在其中设置项目动画。我正在使用声明的animator在适配器的getView()方法中从左侧滑入项目。下面是应用动画的getView()方法 @Override public View getV

我的问题: 在我开始滚动后,ListView中的一个项目会显示动画。这不是最后一项,动画应该完成。问题解决后,我滚动一次,它只会在列表中的单个项目上发生一次

在开始滚动ListView后,如何停止单个项目的动画制作

我希望在将项目添加到适配器时,动画只运行一次

我有一个列表适配器,当项目添加到列表中时,我在其中设置项目动画。我正在使用声明的animator在适配器的getView()方法中从左侧滑入项目。下面是应用动画的getView()方法

@Override
public View getView(int position, View convertView, ViewGroup parent) {
String listItemText = mList.get(position);
ViewHolder holder = null;

if (convertView == null) {

    LayoutInflater li = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = li.inflate(R.layout.list_item, null);

    holder = new ViewHolder();
    holder.mListItemText = (TextView) convertView.findViewById(R.id.progress_title);
    Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.slide_in_left);
    convertView.startAnimation(animation);

    convertView.setTag(holder);
} else {
    holder = (ViewHolder) convertView.getTag();
}

holder.mListItemText.setText(listItemText);

return convertView;
}
private static class ViewHolder {
    public TextView mListItemText;

}

第一次列表尝试生成行时,convertView为null。 因此,动画仅在第一次和第一个项目中开始

例如,如果某个标志设置为true,则需要设置项目的动画

例如:

要检查项目是否为新项目,我将采用以下方法:

public void initList() {
    /* Change your mList to get Bundle instead of String */
    mList = new ArrayList<Bundle>();
}

/* When you add an item you will put a bundle with your string and a flag that tell the item is new */
public void addItem(String item) {
    Bundle bundle = new Bundle();
    bundle.putString("string", item);
    bundle.putBoolean("new", true);
    mList.add(bundle);
}

您应该改用
ViewPropertyAnimator
。检查这一点:这大大改善了情况。现在,当我滚动屏幕上以前显示的所有项目时,会显示动画。它看起来比仅仅为一个随机项目设置动画要好得多。有没有办法告诉屏幕外的项目在它们变得可见时不要设置动画?我正在更新答案谢谢更新和答案。我非常喜欢捆绑解决方案,并感谢您的帮助。不幸的是,添加时屏幕外的项目只有在滚动到屏幕上后才会显示动画,但我认为这与我所问的是一个单独的问题/问题,在滚动上显示动画对我的项目来说很好。
public View getView(int position, View convertView, ViewGroup parent)     {
    Bundle item = mList.get(position);
    ViewHolder holder = null;

    if (convertView == null) {

        LayoutInflater li = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = li.inflate(R.layout.list_item, null);

        holder = new ViewHolder();
        holder.mListItemText = (TextView) convertView.findViewById(R.id.progress_title);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.mListItemText.setText(item.getString("string"));

    if(item.getBoolean("new") == true) {
        Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.slide_in_left);
        convertView.startAnimation(animation);
        item.setBoolean("new", false);
    }

    return convertView;
}