CheckBoxPreference SwitchCompat缺少动画

时间:2017-06-11 01:21:57

标签: android android-animation checkboxpreference switchcompat

我花了超过10个小时试图让开关的动画工作。

我尝试了很多事情,我不记得有几次尝试,但我会解释那些我记得的事情。

应该有效的代码(我认为):

我使用widgetLayout参数:

<CheckBoxPreference
    android:defaultValue="false"
    android:key="asd"
    android:title="@string/asd"
    android:widgetLayout="@layout/switchcompat_for_settings">

switchcompat_for_settings:

<android.support.v7.widget.SwitchCompat
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@null"
    android:clickable="false"
    android:focusable="false"
    android:gravity="center"
    />

没有动画。

使用此代码扩展SwitchCompat(最佳尝试??): https://gist.github.com/antifriz/ad4412b72d50f63ec977

从false变为true,动画,从true变为false,没有动画。

非理想行为(但如果无法阻止,则可以接受):如果值为true,则在加载活动时播放动画。

使用以下代码进行扩展:

Extending Preference classes in Android Lollipop = losing animation

根本没有动画。

@Override
public boolean isShown() {
    return getVisibility() == VISIBLE;
}

使用SwitchPreference:

在Lollipop之前它有旧视图,所以不太理想,因为在Lollipop之前和之后我需要不同的xml。 如果我只有一个SwitchPreference,我仍然没有动画。通过几个连续的SwitchPreferences我得到一个除了一个之外的动画(我还检查了一个带有设置模板和同样问题的新项目)。

另外,除了一个以外,我不喜欢任何Preference中的动画而不是动画。

添加第二个开关:

switchcompat_for_settings 中,我添加第二个SwitchCompat并将 id = @ android:id / checkbox 设置为不可见。我扩展了CheckboxPreference以覆盖onBindView,在调用super.onBindView之后,我找到了额外的SwitchCompat并将setChecked调用到适当的值。

onPreferenceClick 中,我调用了额外开关的setChecked。

没有动画就切换。我的理解是问题是onBindView被称为很多次(当创建首选项时,以及每次我切换它时),它取消了动画。

我试图添加一个布尔值,只有在从onClick调用但没有成功之后才调用onBindView中的setChecked。也许这是要走的路,我做错了。

只剩下想法(不愿意这样做): 手动将开关添加到活动根视图,放置在具有此首选项的每个活动(几个)的正确位置和句柄中。

0 个答案:

没有答案