如何同步列表中的可观察对象?

问题描述 投票:0回答:1

我想对列表中的每一项执行运算符。当上一项的运算符完成时,应触发列表的下一项。目前(见代码)运算符是对所有项目并行执行的。如何避免并行处理?

List<String> strings = new ArrayList<>(3);
    strings.add("String1");
    strings.add("String2");
    strings.add("String3");

    Observable<String> stringObservables = Observable.from(strings);
    stringObservables
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .lift(new TranslateViewOperator( ... parameters ... ))
            .subscribe();

算子定义如下:

public class TranslateViewOperator implements Observable.Operator<View, View> {

long         duration;
Interpolator interpolator;
int          runningAnimations;
float        xTransform;

public TranslateViewOperator(float xTransform, long duration, Interpolator interpolator) {
    super();
    this.duration = duration;
    this.interpolator = interpolator;
    this.xTransform = xTransform;
}

@Override
public Subscriber<? super View> call(final Subscriber<? super View> subscriber) {

    return new Subscriber<View>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(View view) {
            runningAnimations++;
            System.out.println("TranslateViewOperator.onNext");
            ViewCompat.animate(view)
                      .translationX(xTransform - runningAnimations)
                      .scaleX(1f)
                      .scaleY(1f)
                      .setStartDelay(1000)
                      .setDuration(1000)
                      .setInterpolator(interpolator)
                      .withEndAction(() -> {
                          System.out.println("Animation finished");
                      });
        }
    };
}

}

println输出如下:

TranslateViewOperator.onNext
TranslateViewOperator.onNext
TranslateViewOperator.onNext
Animation finished
Animation finished
Animation finished

这意味着首先所有的动画都从这里开始。但是我想在上一个动画完成后开始下一个动画。

rx-java
1个回答
0
投票

你正在寻找 Bindings.bindContent(list1, list2);

适用于 JavaFX。

在 {@link javafx.collections.ObservableList} 和 {@link java.util.List} 之间生成内容绑定。

© www.soinside.com 2019 - 2024. All rights reserved.