使用RecyclerView中的动画更改CheckBox

时间:2015-12-18 16:21:15

标签: android checkbox android-recyclerview

如果用户点击CheckBox,它会运行一个非常好的动画(在Lollipop上)。

但是,如果我以编程方式调用myCheckBox.toggle(),它不会运行动画,但会立即显示新状态。有没有办法在以编程方式更改已检查状态时运行平滑动画?

编辑:事实证明,当这是一个RecyclerView项时,它不会运行动画。否则就会运行......

EDIT2 :问题出在项目动画师身上。它似乎在开始它之前杀死所有其他动画。我想this确切的行会导致问题。

3 个答案:

答案 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()
  • 更新列表内的项目(已检查状态保存在列表项目中)
  • 需要使用DiffUtil
  • 更新适配器(数据已更改)

如果只是致电notifyDataSetChanged(),动画就无效了。