Android animate()不';t更新用户界面

Android animate()不';t更新用户界面,android,animation,user-interface,view,invalidation,Android,Animation,User Interface,View,Invalidation,我试着自己实现类似于a的东西。 因此,我必须在与ListView项目交互时设置它们的动画。 我在拖动ListView项时使用API来实现这一点,如下所示: ListView parent_list_view = ...; View list_view_item = ...; int destination = ...; long animation_time = ...; list_view_item.animate().translationX(destination).setDuratio

我试着自己实现类似于a的东西。 因此,我必须在与ListView项目交互时设置它们的动画。 我在拖动ListView项时使用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中看不到任何更改,但在一段时间后在控制台上获得“animation ended”输出。在下一次用户交互(例如触摸屏)时,项目直接跳转到目标位置(无动画)。 我引入了一行,使父项在动画结束后“由其自身”跳转到其目的地。 然而,这不是我想要的行为

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


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

也许这段视频可以帮助你

谢谢你的帮助。我之前看过这段视频,但第二次看到它,给了我一个如何为我的问题实施更好的解决方法的提示。现在,我向父ListView的。在它的onPreDraw()方法中,如果任何项目执行动画,我将调用parent.invalidateViews()。我现在可以看到动画,但我怀疑这是最佳解决方案。更多的想法?