android:如何禁用切换动画?

时间:2016-02-24 13:28:22

标签: android widget

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

4 个答案:

答案 0 :(得分:0)

这是来自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小部件中复制代码,重命名代码,删除动画,制作一些drawable,然后您将获得非动画切换。

答案 1 :(得分:0)

我可以通过从视图层次结构中删除它来禁用交换机的动画,在删除它时调用setChecked(val),然后将其读取到视图层次结构。

这是kludgey,但据我所知,它是唯一的方法 - 你不能将Switch子类化为覆盖setChecked()行为,因为你仍然需要调用super.setChecked()来运行Switch #setChecked()并且无论如何都要做动画。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您有不想要的动画,则第一次显示Switch时,可能会帮助您改用SwitchCompat