1

我正在尝试在 ListViews 中执行类似 iOS7 的删除行为。即单击一个- 符号并动画(翻译)包含- 符号的行到左侧将显示删除按钮的位置。然后,如果用户单击另一个 - 在不同的行上签名,旧行将动画回其原始位置,新单击的行将转换为左侧显示删除按钮。现在,在屏幕上显示的行上执行此操作没有问题,但向下或向上滚动列表,一些之前没有动画的随机视图被向右平移(取消删除时的效果)。我知道这是因为视图回收。我已经尝试了很多次保存打开(显示删除按钮)行的位置,将标签设置为打开/关闭,但没有成功,我仍然得到未触及的动画行。

PS:我正在使用view.animate().translateXBy([width of delete button])ie propertyAnimator

4

2 回答 2

1

有点晚了,但也许这可以帮助某人,我实际上是在 getView 方法中执行此操作并且工作正常,此示例是一次运行多个动画,但仍然很容易为一个简单的动画修改它:

 private void translationY(View convertView) {
    ObjectAnimator anim1 = ObjectAnimator.ofFloat(convertView, View.TRANSLATION_Y, 400f, 0f);
    anim1.setDuration(TRANSLATION_Y_DURATION);

    ObjectAnimator anim2 = ObjectAnimator.ofFloat(convertView, View.ALPHA, 0f, 1f);
    anim2.setDuration(FADE_IN_DURATION);

    startAnimation(anim1, anim2);
}

private void startAnimation(Animator... items){
    AnimatorSet set = new AnimatorSet();
    set.playTogether(items);
    set.start();
}
于 2014-08-04T19:46:08.933 回答
1

在动画开始之前告诉列表视图不要回收视图

view.setHasTransientState(true);

之后

view.setHasTransientState(false);
于 2013-11-16T05:50:24.737 回答