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

2024-04-08

我正在做一个基于 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 中的各个元素设置动画?或者我做错了什么?

Thanks!

附:根据记录,ListView 填充了自定义视图(LinearLayouts),并且我已检查在制作动画之前是否获得了正确的项目。


我发现问题是什么:

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

这条线就是问题所在。它返回一个new View在列表中的指定位置显示基础数据而不是existing View。所以返回的View与列表无关。

相反,这样做:

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

给我了View该列表正在使用并且动画按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 ListView 中的单个元素设置动画 的相关文章

随机推荐