Android animate()不';t更新用户界面
我试着自己实现类似于a的东西。 因此,我必须在与ListView项目交互时设置它们的动画。 我在拖动ListView项时使用API来实现这一点,如下所示: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
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()。我现在可以看到动画,但我怀疑这是最佳解决方案。更多的想法?