删除选定行后,ListView动画行

时间:2012-11-27 09:32:14

标签: android listview animation

我已经阅读了很多关于行动画的教程,但是所有这些教程都描述了如何为所选行设置动画。我设法做到了。但是有一个问题。当用动画删除行时,我从适配器中删除数据并调用notifyDataSetChanged();行(在删除的行下方)没有动画。我怎样才能实现这些行的动画?我希望它们顺利上滑。

1 个答案:

答案 0 :(得分:2)

删除项目点击列表项目,希望此代码对您有所帮助

 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                    final int position, long id) {
                // TODO Auto-generated method stub
                Animation anim = AnimationUtils.loadAnimation(view.getContext(),
                        android.R.anim.slide_out_right);
                anim.setDuration(500);
                view.startAnimation(anim);

                new Handler().postDelayed(new Runnable() {

                    public void run() {

                        strings.remove(position);
                        mAdapter.notifyDataSetChanged();

                    }

                }, anim.getDuration());

            }
            });

<强>更新

请记住调用notifydatasetChanged()时的架构框架。

  1. 调用getView方法
  2. 在调用get视图时,它将重建列表视图的所有行。
  3. 在你的情况下,我们必须为getView方法设置动画(在notifydatasetchanged的动作上再次调用它)。这是解决方案:

    /**
           * Hear strings is the data set
           */
          @Override
            public View getView(final int position, View convertView,
                    ViewGroup parent) {
                final String str = this.strings.get(position);
                final Holder holder;
    
                if (convertView == null) {
                    convertView = mInflater.inflate(
                            android.R.layout.simple_list_item_1, null);
                    convertView.setBackgroundColor(0xFF202020);
    
                    holder = new Holder();
                    holder.textview = (TextView) convertView
                            .findViewById(android.R.id.text1);
                    holder.textview.setTextColor(0xFFFFFFFF);
    
                    convertView.setTag(holder);
                } else {
                    holder = (Holder) convertView.getTag();
                }
    
                holder.textview.setText(str);
    
                Animation animation = null;
                animation = new ScaleAnimation((float) 1.0, (float) 1.0, (float) 0,
                        (float) 1.0);
    
                animation.setDuration(750);
                convertView.startAnimation(animation);
                animation = null;
    
                return convertView;
            }
    

    请检查它是否有效,并告诉我它是否对您有用/有帮助。