android:如何禁用switch的动画?
最近,我正在使用名为switch的小部件。开关是Android Studio的默认小部件。问题是,当我用开关添加新项目时,它的动画将运行,但我不想看到它。 我在我的项目中使用了ListView和游标适配器。开关是作为ListView元素的一个项。android:如何禁用switch的动画?,android,widget,Android,Widget,最近,我正在使用名为switch的小部件。开关是Android Studio的默认小部件。问题是,当我用开关添加新项目时,它的动画将运行,但我不想看到它。 我在我的项目中使用了ListView和游标适配器。开关是作为ListView元素的一个项。 你知道如何解决这个问题吗?这是来自Switch小部件的一段代码(你也可以看到它-只需在Android Studio项目窗口中按Ctrl键并单击Switch): 在可见时,它将始终显示动画。所以你不能禁用它。 但是您可以扩展CompoundButton类
你知道如何解决这个问题吗?这是来自Switch小部件的一段代码(你也可以看到它-只需在Android Studio项目窗口中按Ctrl键并单击
Switch
):
在可见时,它将始终显示动画。所以你不能禁用它。
但是您可以扩展CompoundButton
类并制作自己的开关小部件,而无需任何动画
您还可以从Switch widget复制代码,重命名它,删除动画,制作一些可绘制图形,您将得到一个非动画的开关。这是Switch widget的一段代码(您也可以看到它-只需在Android Studio项目窗口中按Ctrl键并单击
开关即可):
在可见时,它将始终显示动画。所以你不能禁用它。
但是您可以扩展CompoundButton
类并制作自己的开关小部件,而无需任何动画
您还可以从Switch小部件复制代码,重命名它,删除动画,制作一些可绘制的,然后您将得到一个非动画的开关。我可以通过将开关从视图层次中删除,在删除时调用setChecked(val),然后将其读取到视图层次中来禁用开关的动画
这很难理解,但据我所知,这是唯一的方法——你不能将Switch子类化以覆盖setChecked()行为,因为你仍然需要调用super.setChecked(),它将运行Switch#setChecked()并执行动画。我可以通过从视图层次结构中删除它来禁用开关的动画,在删除setChecked(val)时调用它,然后将其读取到视图层次结构中
这很难理解,但据我所知,这是唯一的方法——你不能将Switch子类化以覆盖setChecked()行为,因为你仍然需要调用super.setChecked(),它将运行Switch#setChecked()并执行动画。调用将禁用动画,如果在开关上调用setChecked()
后立即调用它。如果在开关上调用setChecked()
后立即调用它,则调用将禁用动画。如果有不需要的动画,当第一次显示switch
时,然后,它可能会帮助您改用SwitchCompat
。如果您有不需要的动画,当第一次显示Switch
时,然后它可能会帮助您使用SwitchCompat
。一些代码块会帮助我们回答。我使用两个活动,第一个活动有一个switch小部件。我公开了名为checked的属性,该属性用于更改开关的状态。我使用startinent切换两个活动。幸运的是,我的问题解决了。一些代码块可以帮助我们回答。我使用了两个活动,第一个活动有一个开关小部件。我公开了名为checked的属性,该属性用于更改开关的状态。我使用startinent切换两个活动。幸运的是,我的问题解决了。我已经阅读了交换机的源代码,但我仍然不知道如何解决这个问题。因此,我在网站上提出了这个问题。但我发现,当我向数据库添加新项目时,没有动画。无论如何谢谢你!这很简单!只需将Switch文件内容作为MySwitch复制到项目中,并替换animateThumbToCheckedState(选中);设置拇指位置(选中?1:0);你们也可以在开关不可见时切换开关。@AlexandrShutko你们自己试过吗?当将Switch小部件的源代码复制到项目中时,您将得到许多编译错误,因为源代码中有许多无法解析的类。是的。我试过了。那是差不多两年前的事了,所以我不记得细节了,但是没有这样的问题。我读过交换机的源代码,但是我仍然不知道如何解决这个问题。因此,我在网站上提出了这个问题。但是我发现当我在数据库中添加一个新项目时,没有动画。无论如何谢谢你!这很简单!只需将Switch文件内容作为MySwitch复制到项目中,并替换animateThumbToCheckedState(选中);设置拇指位置(选中?1:0);你们也可以在开关不可见时切换开关。@AlexandrShutko你们自己试过吗?当将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);
}
}