【发布时间】:2011-01-24 01:00:00
【问题描述】:
是否可以为 expandableListView 应用展开或折叠动画?
【问题讨论】:
-
我不认为有可能使行之间的间隙动画,尽管我将幻灯片左/右动画放在我作为孩子显示的视图上。这只真正有效,因为只有一个孩子。
标签: android animation expandablelistview
是否可以为 expandableListView 应用展开或折叠动画?
【问题讨论】:
标签: android animation expandablelistview
我找到了解决此问题的可能(部分)解决方法。
首先你需要存储 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(...)
这将在您每次展开组时为子视图设置动画。
这样做的缺点是:
【讨论】:
可以使用一个简单的 ListView 来完成,它包含一个最初隐藏的视图和一个扩展动画的自定义类。
基本思想是从View.GONE 开始,然后逐渐将边距从负值重新调整为所需大小,同时将可见性设置为View.VISIBLE。
见:
..最后
最后一个示例包含您需要的所有代码。对我来说这看起来有点骇人听闻,尤其是您必须最初设置view.bottomMargin = -50 或更多,否则动画第一次无法正常工作,但到目前为止我没有找到任何可行的替代方案(除了使用 ScrollView 和您自己的容器项目,而不是 ListView)。
最后,这个应用程序包括上面的示例,以及许多其他有用的示例,其中包含指向源的链接:
更新:Google 因涉嫌侵犯知识产权而从 Play 商店中删除了该应用程序(尽管它仅包含演示和开源项目的链接),作者现在提供该 apk 可从 http://goo.gl/ihcgs 直接下载 有关详细信息,请参阅https://plus.google.com/108176685096570584154/posts。注意:我不隶属于作者。
【讨论】:
我为一个简单的列表视图做了类似的工作。为此,我覆盖了 getView 方法并在每个列表项上应用了向上(或向下)动画。平移的程度由列表项的位置决定.
【讨论】: