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

标签 android listview animation

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

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

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 中的各个元素设置动画?还是我做错了什么?

谢谢!

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

最佳答案

我发现了问题所在:

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

这行就是问题所在。它返回一个 View 来显示列表中指定位置的基础数据,而不是现有 View 。所以返回的View与列表无关。

而不是这样做:

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

为我提供了列表正在使用的View,并且动画按预期工作。

关于android - 如何为 ListView 中的单个元素设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903364/

相关文章:

javascript - Div 出现在其正常位置 "during the time they are displaying"下方并具有动画效果?

c# - 可见性变化动画 : property was already registered by 'FrameworkElement'

java - 将一个对象发送到另一个对象内的数组

php - 将数据发送到 JSON 以实现数据库连接

java - Getter 不关联任何字段 - Realm

android - 单击回调后的新 Intent

c# - ListView 中的上下文菜单,选择一个项目

android - 使用 Android 中的动画将 ImageView 移动到不同的位置

java - Android SurfaceView 视频重叠

java - 在添加 Cordova 插件时合并文件