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