繁体   English   中英

android:如何禁用开关动画?

[英]android : how to disable the animation of switch?

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

如果在开关上调用setChecked()后立即调用jumpDrawablesToCurrentState()将禁用动画。

这是来自 Switch 小部件的一段代码(您也可以看到它 - 只需按 Ctrl 并在您的 Android Studio 项目窗口中单击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 小部件复制代码、重命名、删除动画、制作一些可绘制对象,然后您将获得一个非动画开关。

如果您有不需要的动画,当第一次显示Switch时,那么它可能会帮助您改用SwitchCompat

我能够通过从视图层次结构中删除它来禁用开关的动画,在它被删除时调用 setChecked(val),然后将它读入视图层次结构。

它很笨拙,但据我所知,这是唯一的方法——你不能子类化 Switch 来覆盖 setChecked() 行为,因为你仍然需要调用 super.setChecked() 它将运行 Switch#setChecked( ) 并做动画。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM