【问题标题】:Expand listview with animation (on few items - not the whole list)用动画展开列表视图(在少数项目上 - 不是整个列表)
【发布时间】:2013-12-15 17:07:51
【问题描述】:

事实: 我有一个包含 6 个项目(字符串)的列表,最后一个项目有字符串“更多选项”。

点击“更多选项”后,列表应在第 5 项和“更多选项”(最后一项)之间添加 3 项。

 - item1
 - item2
 - item3
 - item4
 - item5
 - "more options"

问题: 我使用 notifyDataSetChanged() 通知适配器新项目已添加到列表中。 但是,在不重新创建整个列表的情况下,动画将列表从 6 项扩展到 9 项的最佳方式是什么?

列表的最终外观(将 item6、item7、item8 与 ONE 动画放在一起后)。

 - item1
 - item2
 - item3
 - item4
 - item5
 - item6 (new)
 - item7 (new)
 - item8 (new)
 - "more options"

将所需的每个项目都放在开头并让 item6、item7、item8 不可见是不是不好的做法/hacky?最好的方法是什么?

我希望我的问题写得很好,每个人都能理解我的痛苦。

谢谢

【问题讨论】:

标签: android list listview collapse expand


【解决方案1】:

你必须创建类似这样的动画

 private void enlarge(final View v, AnimationListener al)
{
    final int initialHeight = v.getMeasuredHeight();

    Animation anim = new Animation() {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t)
        {
            if (interpolatedTime == 1)
            {
                v.setVisibility(View.GONE);
            }
            else
            {
                v.getLayoutParams().height = initialHeight + (int) (initialHeight * interpolatedTime);
                v.requestLayout();
            }
        }

        @Override
        public boolean willChangeBounds()
        {
            return true;
        }
    };

    if (al != null)
    {
        anim.setAnimationListener(al);
    }
    anim.setDuration(ANIMATION_DURATION);
    v.startAnimation(anim);
}

然后在创建 AnimationListener 之前将项目添加到列表视图时使用它

  AnimationListener al = new AnimationListener() {
        @Override
        public void onAnimationEnd(Animation arg0)
        {
            mAnimList.remove(index);

            ViewHolder vh = (ViewHolder) v.getTag();
            vh.needInflate = true;

            mMyAnimListAdapter.notifyDataSetChanged();
        }

        @Override
        public void onAnimationRepeat(Animation animation)
        {
        }

        @Override
        public void onAnimationStart(Animation animation)
        {
        }
    };

最后打电话

  enlarge(v, al);

【讨论】:

  • 你在这里放大每一个项目吗?
  • 是的,如果您只想扩展一次您必须找到要添加的项目所需的长度,然后在“更多选项”之前使用最后一个项目调用此代码,则此代码将适用于每个项目。跨度>
猜你喜欢
  • 2014-09-07
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多