gpt4 book ai didi

android - 如何在 MediaPlayer 应用程序中限制/去抖搜索栏搜索事件

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:01 27 4
gpt4 key购买 nike

我正在编写一个 MediaPlayer Android 应用程序并希望限制/消除 Seekbar 事件。无法找到一个好的解决方案来最小化用户在搜索栏上移动手指时生成的搜索操作的数量。

在不使用额外库的情况下,最简单的解决方案是什么?

我将发布涉及 RxJava 和 RxBindings 的解决方案作为帮助他人的答案。

最佳答案

int SEEKBAR_THROTTLE_INTERVAL = 100; //ms
mSeekBarSubscription = RxSeekBar.userChanges(mSeekBar)
.doOnNext(new Action1<Integer>() {
@Override
public void call(Integer integer) {
mUpdateProgressRoutine.stopRoutine();
}
})
.debounce(SEEKBAR_THROTTLE_INTERVAL, TimeUnit.MILLISECONDS)
.onBackpressureLatest()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer progress) {
onProgressChanged(mSeekBar, progress, true);
}
});

在这种情况下,我使用去抖并且不节流。我发现以下类比很有帮助:

Imagine that you go home, enter in the elevator, doors are closing... and suddenly your neighbor appears in the hall and tries to jump on the elevator. Be polite! and open the doors for him: you are debouncing the elevator departure. Consider that the same situation can happen again with a third person, and so on... source

效果是,如果用户在搜索栏上快速移动手指,只有最后一个事件会“获胜”并触发 MediaPlayer 实例上的搜索操作:您不会听到“抓取噪音”或浪费性能。

因为我也找不到关于如何在不使用两个不同的 Observable 的情况下订阅所有更改事件的示例,所以我将分享一个示例:

mSeekbarSubscription = RxSeekBar.changeEvents(mSeekBar)
.ofType(SeekBarProgressChangeEvent.class)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<SeekBarProgressChangeEvent>() {
@Override
public void call(SeekBarProgressChangeEvent seekBarChangeEvent) {
SeekBar seekBar = seekBarChangeEvent.view();
int progress = seekBarChangeEvent.progress();
boolean fromUser = seekBarChangeEvent.fromUser();
//same as SeekbarListener.onProgressChanged
}
});

关于android - 如何在 MediaPlayer 应用程序中限制/去抖搜索栏搜索事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35523107/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com