2010-03-05 77 views
29

是否可以为expandableListView应用展开或折叠动画?animation for expandableListView

+0

我不认为有可能使行之间的间隙设置为动画,但我将幻灯片左/右动画放在作为孩子显示的视图上。这只有真正的作用,因为只有一个孩子。 – skorulis 2011-03-04 05:59:46

回答

10

可以使用包含最初隐藏视图的简单ListView和扩展Animation的自定义类来完成。 基本思路是从View.GONE开始,然后逐渐将边距从负值重新调整为所需的大小,同时将可见性设置为View.VISIBLE

参见:

..和最后

最后一个例子包含您需要的所有代码。它对我来说看起来有些ha especially,特别是你必须首先设置view.bottomMargin = -50或更多,否则动画第一次不能正常工作,但到目前为止我没有找到任何可行的替代方法(除了使用自己的ScrollView容器项而不是ListView)。

最后,这个程序包括上面的例子中,很多的链接其他有用的例子源之间:

更新:谷歌删除从Play商店应用据称智力财产违规(虽然它只包含演示和链接到开源项目),作者现在提供apk可直接从http://goo.gl/ihcgs 下载欲了解更多详情,请参阅https://plus.google.com/108176685096570584154/posts。注意:我不属于作者。

+0

感谢您的UI模式应用程序链接。 – howettl 2012-05-01 21:30:46

+0

但是这会失去使用listView的全部观点,因为组中的所有项目(您展开的)都必须位于其中。如果你有很多项目,你也需要在那里创建很多视图... – 2013-12-31 15:31:47

+0

@android developer:你可能会更好使用ScrollView,使用视图填充它并将动画应用到它们上需要。 ListView是一个为大型列表优化的复杂组件;如果您只有多达12个项目,那么滚动视图可能更容易生成动画 - 根据需要制作自己的块组件并为其中的视图制作动画。与ListView相比,主要的缺点是android不会创建/销毁您的项目,因为它们滚动进出视图区域,并且容器不会被重用,但是如果您有几件物品,这不是什么大问题。 – ccpizza 2014-01-01 22:46:51

1

我为一个简单的列表视图做了类似的工作。为此,我重写了getView方法并在每个列表项上应用了向上(或向下)的动画翻译。翻译的程度取决于列表的位置项目。

+0

https://github.com/idunnololz/AnimatedExpandableListView/ – 2015-06-29 11:00:59

1

我发现了一个可能的(部分)解决此问题的解决方法。

首先你需要存储的ExpnadableListView的滚动状态:

@Override 
public void onScrollStateChanged(final AbsListView view, final int scrollState) { 
    this.mScrollState = scrollState; 
} 

public int getScrollState() { 
    return this.mScrollState; 
} 

为ListView本身,你需要存储被点击了哪个组,以便只有它的孩子会得到动画:

mListView.setOnGroupClickListener(... 
@Override 
public boolean onGroupClick(...){ 
mGroupPosition=groupPosition; 

现在,在getChildView()方法,你检查的滚动的状态,如果是闲置时,启动动画,例如:

public View getChildView(...) { 
// <=prepare rootView and return it later 
if (groupPosition==mGroupPosition&&getScrollState() == OnScrollListener.SCROLL_STATE_IDLE) 
    rootView.setAnimation(...) 

这将在您每次展开组时为子视图设置一个动画。

的这个缺点是:只为扩大孩子的意见

  1. 。您需要考虑额外的逻辑来在折叠组时对其进行动画处理。
  2. 所有动画立即开始。如果您希望它可以起作用,您将需要一个接一个地添加多个动画。
+0

这是一个有趣的方法,但从我学到的知识来看,孩子*物品*不是孩子*观点*,而是兄弟姐妹,所以你用不同的动画制作动画,或者你怎么做?工作示例代码? – Nilzor 2014-11-13 10:14:12

+0

@Nilzor我很久以前就已经完成了它,并且由于时间很短,我不得不去处理动画的需求,对不起, – 2014-11-13 10:37:15

+0

没有机会,谢谢你回到我身边。对于那里的其他人来说,这个问题还没有解决,尽管我觉得应该是Google解决这个问题,如果他们认真对待材料设计指南 – Nilzor 2014-11-13 11:53:38