在显示时为Listview的每个项目设置动画

问题描述 投票:8回答:4

我试图以一种方式显示列表视图元素,每个元素都会动画然后变得可见,因此一个接一个地它们会动画并且对用户可见。但是当我实现动画时,它不是在处理个别项目,而是在整个listview上工作:(

public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row =layoutInflater.inflate(R.layout.categories_row, parent, false);




        tvCatName = (TextView) row.findViewById(R.id.tvCatName);

        tvCatName.setText(Data.alCategoriesModels.get(position).catname);


        row.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                Toasts.pop(activity, "Category id :  " + Data.alCategoriesModels.get(position).catID); 

            }
        });

//      row.setAnimation(animation);
        row.startAnimation(animation);

        return row;
    }

如何在列表视图的每个元素上制作一个一个动画。我是扩展ArrayAdapter。

java android android-listview android-animation
4个回答
14
投票

你可以在android:layoutAnimation上使用ListView

  • anim文件夹中创建动画XML文件。例如(slide_right_in.xml): <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:duration="400" android:fromXDelta="-100%" android:toXDelta="0%"/>
  • 使用根元素layoutAnimation创建另一个动画XML文件:(my_layout_animation.xml<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:animation="@anim/slide_right_in" android:delay="0.5"/>
  • 将它应用于您想要的任何ViewGroup。例如ListView<ListView android:layoutAnimation = "@anim/my_layout_animation" ... />

1
投票

在搞乱我自己的动画实现这种工作的一半时,我发现了ListViewAnimations#ExpandableListItemAdapter,这正是我需要的。

以下是Google Play上的API演示应用:ListViewAnimations


1
投票

这是Android ListView animation的教程 编辑: 我们的想法是在其中创建一个监听器和动画视图:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> adapterView,final View view, final int position,
      long id) {
           anim.setAnimationListener(new Animation.AnimationListener() {

               @Override
              public void onAnimationStart(Animation animation) {
              }

              @Override
              public void onAnimationRepeat(Animation animation) {}

              @Override 
              public void onAnimationEnd(Animation animation) {
                    ItemDetail item = aAdpt.getItem(position);
                    aAdpt.remove(item);
              }
          });
      view.startAnimation(anim);
  }
});

0
投票
int delay=(position-list.getFirstVisiblePosition)*200;
if(delay<=200)
    delay=200;
animation.setStartOffset(delay);
© www.soinside.com 2019 - 2024. All rights reserved.