Android ListView 项目动画 - 仅动画第一个可见项目
Posted
技术标签:
【中文标题】Android ListView 项目动画 - 仅动画第一个可见项目【英文标题】:Android ListView items animation - Animate only first visible items 【发布时间】:2015-02-01 08:48:50 【问题描述】:我正在尝试重现此 ListView 项目:
http://material-design.storage.googleapis.com/videos/components-progressandactivity-progressandactivity-2-drive.mobile-load.folders_large_xhdpi.webm
我已经通过这些代码行成功实现了它(不包括动画 xml 文件):
//Set animation
if(position > lastAnimPosition)
lastAnimPosition = position;
Animation anim = AnimationUtils.loadAnimation(context, R.anim.item_slide_in);
anim.setStartOffset(50 * position);
row.startAnimation(anim);
所以动画很好,但是当我向下滚动时,偏移量有问题 - 它太大了,给人的感觉就像应用程序加载项目的时间过长。 我需要做的是找出我应该何时禁用偏移 - 或者如何仅为第一个显示的项目启用偏移。
【问题讨论】:
能否请您发布 item_slide_in。 能否请您发布您的 Item_slide_in 动画 【参考方案1】:在你的xml中使用布局动画属性
这里的文档:http://developer.android.com/reference/android/view/ViewGroup.html#attr_android:layoutAnimation
将一个文件添加到您的 layout_item_slide_in.xml
的 res/anim 文件夹中,该文件引用了 @anim/item_slide_in
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.5"
android:animation="@anim/item_slide_in" />
现在,稍微更改您的 listview xml 以包含 android:layoutAnimation 属性和值
<ListView
android:id="@+id/foo"
android:layout_
android:layout_
android:layoutAnimation="@anim/layout_item_slide_in"" />
这将实现您想要的相同的首次加载动画样式,而无需在代码中执行此操作
【讨论】:
它就像一个魅力。但我有一个问题 - 有什么方法可以在 notifyDataSetChanged() 等事件上重新设置动画? 尝试在adapter.notifyDataSetChanged()
调用之后在代码中的列表视图引用上调用mListView.startLayoutAnimation()
RecyclerView 也可以这样吗?【参考方案2】:
在YOUR_ADAPTER.notifyDataSetChanged();
之前调用YOUR_LIST_VIEW.scheduleLayoutAnimation();
以在dataSetChange 之后为您的列表重新设置动画
【讨论】:
以上是关于Android ListView 项目动画 - 仅动画第一个可见项目的主要内容,如果未能解决你的问题,请参考以下文章
从listView中删除项目仅删除最后一项未选择的元素android
使用Material Design在Android Lollipop中的ListView中的活动过渡动画