最近,我正在使用名为“switch”的小部件。开关是Android Studio的默认小部件。问题在于,当我添加一个新项目时,它会运行其动画,但我不想看到它。 我在我的项目中使用了ListView和Cursor Adapter。而开关是ListView元素作为一个项。 你知道怎么解决吗?
最近,我正在使用名为“switch”的小部件。开关是Android Studio的默认小部件。问题在于,当我添加一个新项目时,它会运行其动画,但我不想看到它。 我在我的项目中使用了ListView和Cursor Adapter。而开关是ListView元素作为一个项。 你知道怎么解决吗?
如果您在首次显示Switch
时遇到不必要的动画,则使用SwitchCompat
可能会对您有所帮助。
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小部件中复制代码,重命名它,删除动画,制作一些可绘制对象,然后您将获得一个非动画开关。
我成功地通过将开关从视图层次结构中移除,调用 setChecked(val) 方法并在其被移除时执行,然后重新添加到视图层次结构中来禁用开关的动画。
这种方法有些笨拙,但据我所知,这是唯一的方法 -- 你不能通过子类化 Switch 来重写 setChecked() 的行为,因为你仍然需要调用 super.setChecked(),它会运行 Switch#setChecked() 并执行动画。