我有一个列表视图,每个项目都会动画显示在视图中。我基本上创建了一个类似于here的Material Design动画的动画。动画如下:
<translate
android:fromXDelta="0%" android:toXDelta="0%"
android:fromYDelta="50%" android:toYDelta="0%"
android:duration="750" />
<alpha
android:fromAlpha="0.0" android:toAlpha="1.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:duration="600"/>
这与一个偏移相结合,使每个行项的淡入时间略晚于前一个(在适配器getView中完成):
Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.listitem_up);
animation.setStartOffset(offset);
row.startAnimation(animation);
offset += 100;
现在最初创建列表时,一切都是动画的,很好。但是,从滚动中显示的任何后续项目都会有越来越长的偏移量,因为它永远不会重置。我无法弄清楚如何a)在滚动之前重置偏移量,或b)只在初始加载时出现动画一次。
我查看了滚动监听器,但是根据我自己的测试,即使在没有滚动的初始加载时它似乎也会被触发,所以我不太了解它来提出解决方案。
任何建议都将不胜感激。
答案 0 :(得分:1)
您应该在getView
权限中使用此代码吗?
尝试:
Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.listitem_up);
animation.setStartOffset(position * 100);
row.startAnimation(animation);
这样,偏移量始终为position * 100
,当getView
尝试回收/重用该行时,这可能会有所帮助。
编辑:
我发现了这一点,你可能想看看:animate listView childs only once they appear
基本上,他做了同样的事情,比如我的回答,更多的验证。