在ListVIew中使用“更改”LayoutTransition类型无效

时间:2013-06-21 15:36:35

标签: android listview android-animation layouttransition

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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