如果用户单击CheckBox,它会运行一个非常漂亮的动画(在Lollipop上)。但是如果我通过编程方式调用myCheckBox.toggle(),它不会运行动画,而是立即显示新的状态。当通过编程方式更改选中状态时,有没有办法运行平滑的动画?
CheckBox
myCheckBox.toggle()
EDIT:原来是RecyclerView项目时不运行动画。否则运行...
RecyclerView
编辑2:问题出在物品动画制作器上。看起来它在开始自己的动画之前就杀死了所有其他的动画。我猜就是这一行导致了这个问题。
ut6juiuv1#
要解决这个问题,你必须禁用默认的更改动画,这会杀死列表项视图中的所有其他动画。请注意,这将删除默认的交叉淡入淡出。
((SimpleItemAnimator) RecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
krugob8w2#
我知道这个问题已经有一年的历史了,但是也许我们可以再次讨论这个问题。RecyclerView仍然会杀死动画,因为我找不到这个问题的任何简单答案,所以我会尝试一下。可以使用Handler作为MainThread,在列表内部设置动画。
Handler
MainThread
Handler mainHandler = new Handler(mContext.getMainLooper()); mainHandler.post(new Runnable() { @Override public void run() { holder.mCheckBox.toggle(); } });
这可能是一个矫枉过正,但工程任何类型的动画,即使在onBindViewHolder。我强烈建议检查是否动画应提前播放,或它将播放,即使在滚动。
onBindViewHolder
jdgnovmf3#
不知道它会有多有用。无论如何,我有这样的情况下,当我需要改变CheckBox状态后,点击RecyclerView中的项目。我有同样的问题与动画。所以我做了什么。
mCheckBox.toggle()
如果只调用notifyDataSetChanged(),动画将不起作用。
notifyDataSetChanged()
6yjfywim4#
您可以使用myCheckBox.setChecked(!myCheckBox.isChecked(), true);
myCheckBox.setChecked(!myCheckBox.isChecked(), true);
4条答案
按热度按时间ut6juiuv1#
要解决这个问题,你必须禁用默认的更改动画,这会杀死列表项视图中的所有其他动画。请注意,这将删除默认的交叉淡入淡出。
krugob8w2#
我知道这个问题已经有一年的历史了,但是也许我们可以再次讨论这个问题。
RecyclerView
仍然会杀死动画,因为我找不到这个问题的任何简单答案,所以我会尝试一下。可以使用
Handler
作为MainThread
,在列表内部设置动画。这可能是一个矫枉过正,但工程任何类型的动画,即使在
onBindViewHolder
。我强烈建议检查是否动画应提前播放,或它将播放,即使在滚动。jdgnovmf3#
不知道它会有多有用。无论如何,我有这样的情况下,当我需要改变
CheckBox
状态后,点击RecyclerView
中的项目。我有同样的问题与动画。所以我做了什么。mCheckBox.toggle()
如果只调用
notifyDataSetChanged()
,动画将不起作用。6yjfywim4#
您可以使用
myCheckBox.setChecked(!myCheckBox.isChecked(), true);