0

I'm trying to sample the output of a slider in Android.

The set up is: A PublishSubject mSubjTrim. In the OnTouchEvent of the slider, I call mSubjTrim.onNext(progress)

I create an observable from mSubjTrim

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

(it's set to seconds because it's easier to see logging of output in increments of seconds. In actual use this would be about 50ms sample)

I subscribe to mObsTrim like so:

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

The output upon tweaking the slider results in the following output however

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

This is hardly working as sample is described to work.

I also try

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

And the output is no different!

Why can't I just get a SINGLE update on trim every second?

Edit

So I added a logging message to the listener so I know when the last input was made at

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
Neil Lunn
  • 148,042
  • 36
  • 346
  • 317
Magic Marbles
  • 403
  • 2
  • 5
  • 15

0 Answers0