3

在Android中,我目前正在尝试创建一个列表,其项目在单击时会改变高度,该项目下方的所有视图都会根据高度变化向上或向下动画。我已成功使用以下代码和 LinearLayout 中的项目“列表”:

LayoutTransition t = new LayoutTransition();
t.enableTransitionType(LayoutTransition.CHANGING);
myLinearLayout.setLayoutTransition(t);

但是,当我尝试将此 LayoutTransition 应用于 ListView 而不是 LinearLayout 时,单击项目的高度会设置动画,但其下方的所有项目都会立即跳转到新位置。如何让其余视图使用单击的项目进行动画处理?

4

1 回答 1

1

你不能轻易做到这一点(并且有更好的方法来做到这一点)。ListView 行的位置由 AdapterView 固定和控制。

我做了一点研究。首先,要触发 CHANGING 动画,您不能像往常一样删除行(从适配器中删除项目)。您必须通过将可见性设置为 GONE 来隐藏您的项目,然后它将触发 DISAPPEARING 动画并因此触发 CHANGING 动画。但是要使 CHANGING 动画可用,您必须在更改行高时随时请求布局(在 ListView 上)。在动画结束时,您可以从适配器中删除您的项目并重新绘制 ListView。此外,您可以使您的行 ID 与它们的位置保持稳定,而不是重绘所有 ListView。我试图这样做,但在各种版本的 Android API 上都存在复杂性。

最后,可以使用 LayoutTransition 在 ListView 上实现动画,但这很复杂,从实现的角度来看不值得。对于简单的情况已经足够了,但对于 ListView 中更复杂的动画来说就足够了。要实现动画,最好使用已经煮熟的组件: https ://github.com/nhaarman/ListViewAnimations

于 2014-12-16T11:53:35.717 回答