0

Android でスライダーの出力をサンプリングしようとしています。

セットアップは次のとおりです。 PublishSubject mSubjTrim。スライダーの OnTouchEvent で、mSubjTrim.onNext(progress) を呼び出します。

mSubjTrim からオブザーバブルを作成します

public final Observable<Integer> mObsTrim = mSubTrim.sample(1, TimeUnit.SECONDS)

(出力を秒単位で記録した方が見やすいので秒に設定。実際の使用では、これは約 50ms のサンプルになります)

私は次のようにmObsTrimを購読します:

RxBus.Instance().mObsTrim.subscribe(trim -> {
            Logy.CallPrint(LOGY_ENABLE, CLASSNAME, "Trim Change");
            DispatchTrimChange(trim);
        });

ただし、スライダーを微調整したときの出力は、次の出力になります。

ParameterSender*::Trim Change @1473456738766 // @timeOfEvent via System.currentTimeMillis()
ParameterSender*::Trim Change @1473456745764
ParameterSender*::Trim Change @1473456745765
ParameterSender*::Trim Change @1473456745765
ParameterSender*::Trim Change @1473456745766
ParameterSender*::Trim Change @1473456745766
ParameterSender*::Trim Change @1473456745766
ParameterSender*::Trim Change @1473456745767

サンプルが機能すると説明されているため、これはほとんど機能していません。

私もやってみる

public final Observable<Integer> mObsTrim = mSubTrim.sample(1, TimeUnit.SECONDS).debounce(5, TimeUnit.MILLISECONDS);

そして、出力は同じです!

毎秒トリムで単一の更新を取得できないのはなぜですか?

編集

そのため、最後の入力がいつ行われたかがわかるように、リスナーにログ メッセージを追加しました。

MyActivity::SetTrim @1473458620018 // This is a single input event with nothing before it
ParameterSender*::Trim Change = -25.2 @1473458620287
ParameterSender*::Trim Change = -25.2 @1473458620288
ParameterSender*::Trim Change = -25.2 @1473458620288
ParameterSender*::Trim Change = -25.2 @1473458620289
ParameterSender*::Trim Change = -25.2 @1473458620289
ParameterSender*::Trim Change = -25.2 @1473458620289
ParameterSender*::Trim Change = -25.2 @1473458620290
4

0 に答える 0