Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试从属性Animator中重置要在回收器视图中使用的值_Android_Animation_Objectanimator_Animatorset - Fatal编程技术网

Android 尝试从属性Animator中重置要在回收器视图中使用的值

Android 尝试从属性Animator中重置要在回收器视图中使用的值,android,animation,objectanimator,animatorset,Android,Animation,Objectanimator,Animatorset,在RecyclerView中的一行中(不是行本身,想象一下展开文本)做了一些动画,有时动画会泄漏到其他循环视图中,而这些视图中不应包含该动画 由于我使用属性动画,“缩放”动作调整内部视图的大小,因此可以从两个方面看到泄漏: 1) 动画将继续(这一点我可以通过一些守卫来克服) 2) 视图已调整大小并在其轨迹中停止,因此它将反映在回收视图中 如何将视图重置为其原始状态?我在帖子中尝试了很多方法,但没有一个能解决这个问题。我得到的最接近的定义是在这篇未回复的帖子中: 下面是我如何在onBind中设置

在RecyclerView中的一行中(不是行本身,想象一下展开文本)做了一些动画,有时动画会泄漏到其他循环视图中,而这些视图中不应包含该动画

由于我使用属性动画,“缩放”动作调整内部视图的大小,因此可以从两个方面看到泄漏: 1) 动画将继续(这一点我可以通过一些守卫来克服) 2) 视图已调整大小并在其轨迹中停止,因此它将反映在回收视图中

如何将视图重置为其原始状态?我在帖子中尝试了很多方法,但没有一个能解决这个问题。我得到的最接近的定义是在这篇未回复的帖子中:

下面是我如何在onBind中设置动画的示例(这一个尝试使用onAnimationEnd,我在一篇文章中找到了它,但没有成功)

以下是我在ONUNBINDATA中所做的工作:

if (mTotalAnimation != null) {
        mTotalAnimation.end();
        mTotalAnimation = null;
    }

正如我看到许多人喜欢clearAnimation方法一样——尝试过,但也没有成功。

4天,没有一个响应,但同时我自己解决了它。 因此,这种方法很接近,只是放错了位置

我添加了这个方法:

private void stopAnimation() {
    for (Animator anim : mTotalAnimation.getChildAnimations()) {
        ((ObjectAnimator) anim).reverse();
        anim.end();
    }
}
当我想重置视图时,我会调用它

在这里,我从AnimatorSet获取动画,并反转和结束每个动画。我不明白为什么我必须手动操作,但看起来这项功能将添加到Android O中:

从Android O开始,AnimatorSet API现在支持反向搜索和播放。通过搜索,可以将动画集的位置设置为特定的时间点。如果您的应用程序包含可以撤消的动作动画,则反向播放非常有用。您可以反向播放同一个动画集,而不是定义两个单独的动画集


4天,没有一个回复,但同时我自己解决了。 因此,这种方法很接近,只是放错了位置

我添加了这个方法:

private void stopAnimation() {
    for (Animator anim : mTotalAnimation.getChildAnimations()) {
        ((ObjectAnimator) anim).reverse();
        anim.end();
    }
}
当我想重置视图时,我会调用它

在这里,我从AnimatorSet获取动画,并反转和结束每个动画。我不明白为什么我必须手动操作,但看起来这项功能将添加到Android O中:

从Android O开始,AnimatorSet API现在支持反向搜索和播放。通过搜索,可以将动画集的位置设置为特定的时间点。如果您的应用程序包含可以撤消的动作动画,则反向播放非常有用。您可以反向播放同一个动画集,而不是定义两个单独的动画集

我认为没有必要使用
end()
。它似乎撤消了
reverse()
的效果。另外,要立即将值重置为原始状态,在调用
anim.reverse()
之前需要
anim.setDuration(0)
。我还注意到调用
mTotalAnimation.setDuration(0)
没有效果,必须对每个子动画调用它。我认为
end()
没有必要。它似乎撤消了
reverse()
的效果。另外,要立即将值重置为原始状态,在调用
anim.reverse()
之前需要
anim.setDuration(0)
,我还注意到调用
mTotalAnimation.setDuration(0)
没有效果,必须对每个子动画调用它。