【问题标题】:Animation for expandableListViewexpandableListView 的动画
【发布时间】:2011-01-24 01:00:00
【问题描述】:

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

【问题讨论】:

  • 我不认为有可能使行之间的间隙动画,尽管我将幻灯片左/右动画放在我作为孩子显示的视图上。这只真正有效,因为只有一个孩子。

标签: android animation expandablelistview


【解决方案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. 所有动画立即开始。如果您希望以其他方式工作,则需要一个接一个地添加多个动画。

【讨论】:

  • 这是一个有趣的方法。但据我所知,子 items 不是子 views,而是兄弟姐妹。那么,您是否使用单独的动画为所有孩子制作动画,或者您究竟是如何做到的?工作示例代码?
  • @Nilzor 我很久以前就做过了,由于我的工作时间很短,所以取消了对动画的要求。对不起。
  • 没有问题,感谢您回复我。对于其他人来说,这个问题几乎仍未解决,尽管我觉得如果他们认真对待材料设计指南,谷歌应该解决这个问题
  • @Nilzor 我认为“ExpnadableListView”被忽视了,因为它很少被使用。
【解决方案2】:

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

见:

..最后

最后一个示例包含您需要的所有代码。对我来说这看起来有点骇人听闻,尤其是您必须最初设置view.bottomMargin = -50 或更多,否则动画第一次无法正常工作,但到目前为止我没有找到任何可行的替代方案(除了使用 ScrollView 和您自己的容器项目,而不是 ListView)。

最后,这个应用程序包括上面的示例,以及许多其他有用的示例,其中包含指向源的链接:

更新:Google 因涉嫌侵犯知识产权而从 Play 商店中删除了该应用程序(尽管它仅包含演示和开源项目的链接),作者现在提供该 apk 可从 http://goo.gl/ihcgs 直接下载 有关详细信息,请参阅https://plus.google.com/108176685096570584154/posts。注意:我不隶属于作者。

【讨论】:

  • 感谢用户界面模式应用链接。
  • 但这将失去使用 listView 的全部意义,因为组内的所有项目(您扩展的)都必须在其中。如果那里有很多项目,那么您也需要在那里创建很多视图...
  • @android 开发者:您最好使用 ScrollView,用视图填充它并根据需要对其应用动画。 ListView 是一个针对大列表进行优化的复杂组件;如果您只有十几个项目,那么滚动视图可能更容易制作动画 - 制作您自己的块组件并根据需要为其中的视图制作动画。与 ListView 相比的主要缺点是 android 不会在您的项目滚动进出视图区域时创建/销毁它们,并且容器不会被重用,但如果您有一些项目,这没什么大不了的.
  • @ccpizza 这就是问题所在 - 我有很多项目要展示,比如在列表视图中... :(
  • @ccpizza 我对这个问题做了一个小解决方法,它仍然使用expandableListView。虽然它有一些缺点......
【解决方案3】:

我为一个简单的列表视图做了类似的工作。为此,我覆盖了 getView 方法并在每个列表项上应用了向上(或向下)动画。平移的程度由列表项的位置决定.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多