【问题标题】:Change CheckBox checked with animation in RecyclerView在 RecyclerView 中使用动画检查更改 CheckBox
【发布时间】:2016-03-25 09:51:40
【问题描述】:

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

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

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

EDIT2:问题在于项目动画师。似乎它在开始自己的动画之前杀死了所有其他动画。我猜this 确切的行会导致问题。

【问题讨论】:

  • 你试过myCheckBox.performClick();吗?也许这会给你带来不同的结果?
  • 或许你可以阅读源码,自己实现。
  • 我编辑了问题。
  • 你解决了吗?你知道如何以编程方式制作切换动画吗?
  • 从那以后我设法解决了它,请参阅我的答案。

标签: android checkbox android-recyclerview


【解决方案1】:

我知道这个问题已经有一年了,但也许我们可以重新开始讨论。 RecyclerView 仍然会杀死动画,因为我找不到任何简单的答案来回答这个问题,所以我会尝试一下。

可以使用Handler 为MainThread 在列表内设置动画。

Handler mainHandler = new Handler(mContext.getMainLooper());
mainHandler.post(new Runnable() {
    @Override
    public void run() {
        holder.mCheckBox.toggle();
     }
});

这可能有点矫枉过正,但适用于任何类型的动画,即使在onBindViewHolder 内也是如此。我强烈建议您事先检查动画是否应该播放,否则即使滚动也会播放。

【讨论】:

    【解决方案2】:

    不知道会有多大用处。无论如何,在单击RecyclerView 中的项目后,我需要更改CheckBox 状态。我对动画也有同样的问题。所以我做了什么。

    • 项目被点击,我打电话给mCheckBox.toggle()
    • 更新列表内的项目(检查状态保留在列表的项目中)
    • 需要使用DiffUtil 更新适配器(数据已更改)

    如果只是调用notifyDataSetChanged(),动画将不起作用。

    【讨论】:

      【解决方案3】:

      要解决这个问题,您必须禁用默认的更改动画,这会杀死列表项视图上的所有其他动画。请注意,这将删除默认的交叉淡入淡出。

      ((SimpleItemAnimator) RecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-18
        • 2016-10-08
        • 1970-01-01
        • 2015-08-24
        • 1970-01-01
        • 1970-01-01
        • 2015-12-02
        相关资源
        最近更新 更多