0

我尝试自己实现类似SwipeListView的东西。因此,我必须在与 ListView 项目交互时为其设置动画。我在拖动 ListView 项目时使用ViewPropertyAnimator API 来做到这一点:

ListView parent_list_view = ...;
View list_view_item = ...;
int destination = ...;
long animation_time = ...;

list_view_item.animate().translationX(destination).setDuration(animation_time)
    .setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            System.out.println("animation ended");
            //...
            parent_list_view.invalidate();  //TODO: this can't be the solution
        }
    });

不幸的是,这并没有按预期工作。

如果没有使父 ListView 无效的行,我在 UI 中看不到任何变化,但一段时间后在控制台上获得“动画结束”输出。在下一次用户交互(例如触摸屏幕)上,项目直接跳转到目标位置(没有动画)。我介绍了使父项无效的行,以使项目在完成动画后“自行”跳转到其目的地。尽管如此,这不是我想要的行为。

在我看来,该项目在执行动画时并没有使自身或父视图无效。因此,UI 没有更新,我看到了项目视图的旧状态。执行任何用户交互(例如触摸屏幕)时,视图会失效并正确重绘。

我现在调查了这个问题,但不知道在哪里继续搜索错误。我知道,如果没有所有代码,很难调试这个问题。对此我很抱歉,但目前提取相关部分会非常困难。尽管如此,所有关于这个问题的建议都受到高度赞赏。也许我只是忘记了一些愚蠢的事情......

4

1 回答 1

0

也许这个视频可以帮助你 http://graphics-geek.blogspot.com/2013/06/devbytes-animating-listview-deletion_21.html

于 2013-07-29T18:46:47.600 回答