2

スイッチのアニメーションを機能させるために 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 の場合、アクティビティが読み込まれるとアニメーションが再生されます。

次のコードで拡張します。

Android Lollipop で Preference クラスを拡張する = アニメーションが失われる

アニメーションは一切ありません。

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

SwitchPreference の使用:

Lollipop の前は古いビューなので、Lollipop の前と後で異なる xml が必要になるため、理想的ではありません。SwitchPreference が 1 つしかない場合でも、アニメーションはありません。いくつかの連続した SwitchPreferences を使用すると、1 つを除くすべてでアニメーションが表示されます (設定テンプレートを使用した新しいプロジェクトと同じ問題も確認しました)。

また、私は、1 つを除くすべてのアニメーションよりも、どの環境設定にもアニメーションがないことを好みます。

2 番目のスイッチの追加:

switchcompat_for_settingsで、2 つ目のSwitchCompatを追加し、id=@android:id/checkboxを非表示に設定します。CheckboxPreference を拡張して onBindView をオーバーライドし、呼び出した後super.onBindView、追加の SwitchCompat を見つけてsetChecked適切な値を呼び出します。

onPreferenceClickで、追加のスイッチの setChecked を呼び出します。

アニメーションなしでトグルします。私の理解では、問題は onBindView が何度も呼び出されるため (設定を作成するとき、および切り替えるたびに)、アニメーションがキャンセルされることです。

onClick から呼び出された後にのみ onBindView で setChecked を呼び出すブール値を追加しようとしましたが、成功しませんでした。多分それは行くべき道であり、私は何か間違ったことをしました.

残りのアイデアのみ (これを実行するつもりはありません): スイッチを手動でアクティビティ ルート ビューに追加し、正しい位置に配置して、この設定 (いくつか) を持つ各アクティビティからハンドルします。

4

0 に答える 0