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