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