如何从列表中同步observables?

时间:2016-10-19 08:54:23

标签: rx-java

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

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

这意味着首先所有的动画都是从这里开始的。但我希望在上一个动画结束时开始下一个动画。

0 个答案:

没有答案