【问题标题】:Animate each item of Listview when displaying显示时对Listview的每一项进行动画处理
【发布时间】:2013-05-31 06:39:49
【问题描述】:

我正在尝试以一种方式显示列表视图元素,即它们中的每一个都具有动画效果,然后变得可见,因此它们一个一个地具有动画效果并且对用户可见。 但是当我实现动画时,它不是在单个项目上工作,而是在整个列表视图上工作:(

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


    【解决方案1】:

    您可以在ListView 上申请android:layoutAnimation

    • 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"
          ... />
      

    【讨论】:

    • 这会导致应用崩溃
    • @Postback 让我知道您遇到的崩溃类型(堆栈跟踪)
    • 刚试过这段代码,然后我又把它拿出来了。所以不能给你详细信息。当我使用 listView 打开 Activity 时,应用程序崩溃了
    • @Postback 我在我的应用程序中多次使用此代码并且工作正常。您可以参考有关布局动画的文档或发布您的堆栈跟踪
    • 太简单了,太棒了
    【解决方案2】:

    在弄乱了我自己的动画实现后,我找到了 ListViewAnimations#ExpandableListItemAdapter,这正是我所需要的。

    这是他们在 Google Play 上的 API 演示应用:ListViewAnimations

    【讨论】:

      【解决方案3】:
      int delay=(position-list.getFirstVisiblePosition)*200;
      if(delay<=200)
          delay=200;
      animation.setStartOffset(delay);
      

      【讨论】:

      • 你能补充一些解释吗?
      【解决方案4】:

      这里是 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);
        }
      });
      

      【讨论】:

        猜你喜欢
        • 2016-12-18
        • 1970-01-01
        • 2017-06-30
        • 1970-01-01
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多