Android:如何禁用开关的动画?

3

最近,我正在使用名为“switch”的小部件。开关是Android Studio的默认小部件。问题在于,当我添加一个新项目时,它会运行其动画,但我不想看到它。 我在我的项目中使用了ListView和Cursor Adapter。而开关是ListView元素作为一个项。 你知道怎么解决吗?


2
一些代码块会帮助我们回答。 - Rohit5k2
我使用了两个活动,第一个活动具有一个开关小部件。并且我公开了名为"checked"的属性,用于更改开关的状态。我使用startIntent来切换两个活动。幸运的是,我的问题解决了。 - Little pupil
4个回答

9

0

如果您在首次显示Switch时遇到不必要的动画,则使用SwitchCompat可能会对您有所帮助。


0
这是来自 Switch 小部件的一段代码(您也可以看到它 - 只需在 Android Studio 项目窗口中按 Ctrl 并单击 Switch):
@Override
public void setChecked(boolean checked) {
    super.setChecked(checked);

    // Calling the super method may result in setChecked() getting called
    // recursively with a different value, so load the REAL value...
    checked = isChecked();

    if (getWindowToken() != null && ViewCompat.isLaidOut(this) && isShown()) {
        animateThumbToCheckedState(checked);
    } else {
        // Immediately move the thumb to the new position.
        cancelPositionAnimator();
        setThumbPosition(checked ? 1 : 0);
    }
}

当可见时,它将始终显示动画。因此,您无法禁用它。 但是,您可以扩展CompoundButton类并创建自己的开关小部件,而不需要任何动画。

此外,您可以从Switch小部件中复制代码,重命名它,删除动画,制作一些可绘制对象,然后您将获得一个非动画开关。


我已经阅读了开关的源代码,但仍然不知道如何解决这个问题。因此,我在网站上提出了这个问题。但是我发现当我向数据库添加新项目时,没有动画效果。无论如何,还是谢谢! - Little pupil
很简单!只需将Switch文件内容复制到您的项目中作为MySwitch,并将animateThumbToCheckedState(checked)替换为setThumbPosition(checked ? 1 : 0)。此外,您还可以在不可见状态下切换开关。 - Alexandr Shutko
@AlexandrShutko 你自己试过吗?当将Switch小部件的源代码复制到项目中时,由于源代码中存在许多无法解决的类,因此会出现许多编译错误。 - Roman Samoilenko
是的,我试过了。那是将近两年前,我不记得细节了,但当时没有出现这样的问题。 - Alexandr Shutko

-1

我成功地通过将开关从视图层次结构中移除,调用 setChecked(val) 方法并在其被移除时执行,然后重新添加到视图层次结构中来禁用开关的动画。

这种方法有些笨拙,但据我所知,这是唯一的方法 -- 你不能通过子类化 Switch 来重写 setChecked() 的行为,因为你仍然需要调用 super.setChecked(),它会运行 Switch#setChecked() 并执行动画。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接