Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:如何禁用switch的动画?_Android_Widget - Fatal编程技术网

android:如何禁用switch的动画?

android:如何禁用switch的动画?,android,widget,Android,Widget,最近,我正在使用名为switch的小部件。开关是Android Studio的默认小部件。问题是,当我用开关添加新项目时,它的动画将运行,但我不想看到它。 我在我的项目中使用了ListView和游标适配器。开关是作为ListView元素的一个项。 你知道如何解决这个问题吗?这是来自Switch小部件的一段代码(你也可以看到它-只需在Android Studio项目窗口中按Ctrl键并单击Switch): 在可见时,它将始终显示动画。所以你不能禁用它。 但是您可以扩展CompoundButton类

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

这是来自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);
    }
}