android 在RecyclerView中使用动画选中更改复选框

cdmah0mi  于 2023-02-06  发布在  Android
关注(0)|答案(4)|浏览(110)

如果用户单击CheckBox,它会运行一个非常漂亮的动画(在Lollipop上)。
但是如果我通过编程方式调用myCheckBox.toggle(),它不会运行动画,而是立即显示新的状态。当通过编程方式更改选中状态时,有没有办法运行平滑的动画?

EDIT:原来是RecyclerView项目时不运行动画。否则运行...

编辑2:问题出在物品动画制作器上。看起来它在开始自己的动画之前就杀死了所有其他的动画。我猜就是这一行导致了这个问题。

ut6juiuv

ut6juiuv1#

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

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

krugob8w2#

我知道这个问题已经有一年的历史了,但是也许我们可以再次讨论这个问题。RecyclerView仍然会杀死动画,因为我找不到这个问题的任何简单答案,所以我会尝试一下。
可以使用Handler作为MainThread,在列表内部设置动画。

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

这可能是一个矫枉过正,但工程任何类型的动画,即使在onBindViewHolder。我强烈建议检查是否动画应提前播放,或它将播放,即使在滚动。

jdgnovmf

jdgnovmf3#

不知道它会有多有用。无论如何,我有这样的情况下,当我需要改变CheckBox状态后,点击RecyclerView中的项目。我有同样的问题与动画。所以我做了什么。

  • 项,我调用mCheckBox.toggle()
  • 更新列表内的项目(列表的项目保持勾选状态)
  • 需要使用DiffUtil更新适配器(数据已更改)

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

6yjfywim

6yjfywim4#

您可以使用myCheckBox.setChecked(!myCheckBox.isChecked(), true);

相关问题