Android Listview回收是动画行

时间:2013-09-25 23:03:15

标签: android listview view recycle

我正在尝试在ListViews中执行类似iOS7的删除行为。即单击 - 符号并将包含 - 符号的行设置为动画(翻译)到左侧,删除按钮将显示在该行中。然后,如果用户点击另一个 - 在另一行上签名,旧行将动画回原始位置,新点击的行将转换为左侧显示删除按钮。现在,在屏幕上显示的行上执行此操作没有问题,但向下或向上滚动列表,之前未动画的一些随机视图被转换为右侧(取消删除时的效果)。我知道这是因为视图回收。我已经尝试了很多次保存位置打开(删除按钮显示)行,设置标签打开/关闭,但没有成功,我仍然得到未触摸的行动画。我错过了代码所以如果我发布它就不会反映问题:(,所以请非常感谢任何帮助。

P.S:我正在使用view.animate().translateXBy([width of delete button]),即propertyAnimator

2 个答案:

答案 0 :(得分:1)

在动画开始之前

告诉列表视图不回收视图

view.setHasTransientState(true);

之后

view.setHasTransientState(false);

答案 1 :(得分: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();
}