如何在ListView中为单个元素设置动画

时间:2012-06-05 19:09:08

标签: android listview animation

我正在做一个基于ListView的小型Android应用程序。当用户选择列表中的一个或多个元素并随后从ActionBar中选择一个菜单项时,我想对列表中的所选元素进行一个小动画,这就是出错的地方。

没有任何动画 - 也没有任何失败。以下代码片段是我正在做的简化版本:

private void animateListViewItem()
{
    TranslateAnimation anim = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f,
            Animation.RELATIVE_TO_SELF, -1.0f,Animation.RELATIVE_TO_SELF, 0.0f);
    anim.setDuration(2000);
    View v = fragment.getListAdapter().getView(fragment.getListView().getFirstVisiblePosition(), null, null);
    v.startAnimation(anim);
}

当我弄乱它时,试图弄清楚出了什么问题,我在某一点上用整个ListView替换了项目以排除动画作为问题的根源 - 就像这样。

private void animateListViewItem()
{
    TranslateAnimation anim = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f,
            Animation.RELATIVE_TO_SELF, -1.0f,Animation.RELATIVE_TO_SELF, 0.0f);
    anim.setDuration(2000);
    fragment.getListView().startAnimation(anim);
}

令我惊讶的是,这完美无缺!

所以我的问题是 - 为什么我不能在ListView中为各个元素设置动画?或者我做错了什么?

谢谢!

P.S。为了记录,ListView填充了自定义视图(LinearLayouts),我已经检查过我在动画之前得到了正确的项目。

1 个答案:

答案 0 :(得分:5)

我发现了问题所在:

View v = fragment.getListAdapter().getView(fragment.getListView().getFirstVisiblePosition(), null, null);

这条线是问题所在。它返回 new View以显示列表中指定位置的基础数据,而不是现有 View。因此返回的View与列表无关。

而是这样做:

View v = fragment.getListView().getChildAt(fragment.getListView().getFirstVisiblePosition());

找到列表正在使用的View,动画按预期工作。