【发布时间】:2013-07-29 17:00:55
【问题描述】:
我尝试自己实现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 没有更新,我看到了项目视图的旧状态。执行任何用户交互(例如触摸屏幕)时,视图会失效并正确重绘。
我现在对这个问题进行了一段时间的调查,但不知道在哪里继续寻找错误。我知道,如果没有所有代码,很难调试这个问题。对此我很抱歉,但目前提取相关部分会非常困难。尽管如此,所有关于这个问题的建议都受到高度赞赏。也许我只是忘记了一些愚蠢的事情......
【问题讨论】:
标签: android animation user-interface view invalidation