如果用户点击CheckBox
,它会运行一个非常好的动画(在Lollipop上)。
但是,如果我以编程方式调用myCheckBox.toggle()
,它不会运行动画,但会立即显示新状态。有没有办法在以编程方式更改已检查状态时运行平滑动画?
编辑:事实证明,当这是一个RecyclerView
项时,它不会运行动画。否则就会运行......
EDIT2 :问题出在项目动画师身上。它似乎在开始它之前杀死所有其他动画。我想this确切的行会导致问题。
答案 0 :(得分:2)
我知道这个问题已经有一年了,但也许我们可以再次进行讨论。 RecyclerView
仍然会杀死动画,因为我找不到任何简单的答案,我会尝试一下。
可以使用Handler
MainThread
为列表内部设置动画。
Handler mainHandler = new Handler(mContext.getMainLooper());
mainHandler.post(new Runnable() {
@Override
public void run() {
holder.mCheckBox.toggle();
}
});
这可能是一种矫枉过正,但适用于任何类型的动画,即使在onBindViewHolder
内也是如此。我强烈建议您先检查动画是否应该播放,否则即使滚动也会播放。
答案 1 :(得分:1)
要解决此问题,您必须禁用默认更改动画,该动画会杀死列表项视图上的所有其他动画。请注意,这将删除默认的交叉淡入淡出。
((SimpleItemAnimator) RecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
答案 2 :(得分:0)
不知道它会有多大用处。无论如何,我需要在点击CheckBox
中的项目后更改RecyclerView
状态。我对动画也有同样的问题。所以我做了什么。
mCheckBox.toggle()
如果只是致电notifyDataSetChanged()
,动画就无效了。